8

我正在使用带有 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 库的版本?我的设置可能还有其他问题吗?

相关:编码/解码 URL

相关Go源码:http ://golang.org/src/pkg/net/url/url.go?s=14330:14361#L553

4

1 回答 1

5

revel.INFO.Println就像fmt.Printf,它需要一个格式字符串和参数。要记录包含%字符的字符串,您需要对其进行转义,或者最好将其作为参数传递:

revel.INFO.Println("The escaped URL is: %s", url.QueryEscape("http://hello.com"))

(您可以只"%s"用作格式字符串,但为什么不借此机会提供上下文。)

于 2014-07-09T19:51:34.227 回答