我正在使用带有go语言的revel框架。最近,当我运行以下代码时:
import (
...
"net/url"
...
)
revel.INFO.Println(url.QueryEscape("http://hello.com"))
我得到了
INFO 2014/07/09 14:58:34 user.go:39: http%A(MISSING)%F(MISSING)%F(MISSING)hello.com
当我希望得到更像
的东西时INFO 2014/07/09 14:58:34 user.go:39: http%3A%2F%2Fhello.com
为什么%3A
已在输出中被%A(MISSING)
替换,我该如何解决?
唯一的代码,我看到的东西可能会产生字符串"(MISSING)'在fmt
包中,但是通过查看net/url
源代码包,我不知道如何发生这种情况。我是否可能以某种方式访问go库的旧版本(并且已损坏?)?我的设置可能还有其他问题吗?
相关Go源代码:http://golang.org/src/pkg/net/url/url.go?s=14330:14361#L553
答案 0 :(得分:3)
revel.INFO.Println
与fmt.Printf
类似,它需要格式字符串和参数。要记录包含%
个字符的字符串,您需要将其转义,或者更好地将其作为参数传递:
revel.INFO.Println("The escaped URL is: %s", url.QueryEscape("http://hello.com"))
(您可以使用"%s"
作为格式字符串,但为什么不抓住机会提供上下文。)