使用fmt.Printf打印URL的行为非常奇怪

Rei*_*Sam 1 url go

如果我将数据库中的URL保存为

https://xxx.amazonaws.com/sub%2Fsub1/1495771021869-3sx5ims88vu-12f63aaa7d278435e1800486b31f9cc7/xxx.jpg

http.ResponseWriter以下列格式返回

https://xxx.amazonaws.com/sub!F(MISSING)sub1/1495771021869-3sx5ims88vu-12f63aaa7d278435e1800486b31f9cc7/xxx.jpg

在上面的网址中你可以看到%2F被替换为!F(MISSING)

有人可以帮助解决这个问题

以下是代码片段``rs.WriteHeader(retObj.HttpStatus)

jsonStr, res := ConvObjectToJSON(retObj)
if res != nil {
    Logger(ctx, cnst.LogError, "In writeReturnError error in ConvObjectToJSON: %v Original object:%v",
        res.GetMessageWDetails(), retObj)
    rs.WriteHeader(http.StatusInternalServerError)
    return
}

var consoleLog *log.Logger = log.New(os.Stdout, cnst.LogPrefix, log.Ldate|log.Ltime)
consoleLog.Print(jsonStr)

cnt, err := fmt.Fprintf(rs, jsonStr)
if nil == err && 0 < cnt {
    rs.Header().Set("Content-Type", "application/json")
} else {
    Logger(ctx, cnst.LogError, "In writeReturnError error in fmt.Fprintf: %v Original JSON:%v",
        err.Error(), jsonStr)
    rs.WriteHeader(http.StatusInternalServerError)
}
Run Code Online (Sandbox Code Playgroud)

``

我对fmt.Fprintf有疑问

Teh*_*inX 5

正如评论中所提到的:你的问题是Fprintf使用第二个参数作为一种格式,将每个%解释为一个指标,它应该在那里插入一个变量.在您的字符串中有一个%符号,但您没有提供任何插入参数.所以它的着作MISSING.

既然你不想格式化任何东西(似乎)只需使用它:

cnt, err := fmt.Fprint(rs, jsonStr)
Run Code Online (Sandbox Code Playgroud)