%!B(MISSING) fmt.Printf 和 log.Println 之间的不同输出

ayc*_*dee 4 go

我有一些从json.Marshal. 如果像这样将它们记录到标准输出:

log.Println(string(b))
Run Code Online (Sandbox Code Playgroud)

它们的输出如下:

{"encoded":"%2B"}
Run Code Online (Sandbox Code Playgroud)

如果我将它们写入磁盘

fmt.Fprintf(w, string(b))
Run Code Online (Sandbox Code Playgroud)

然后 cat 文件是这样写的:

{"encoded":"%!B(MISSING)"}
Run Code Online (Sandbox Code Playgroud)

据我所知,string(b)really的输出是第一个,也是我预期的输出。我究竟做错了什么?

seo*_*ong 5

Fprintf将格式定义作为第一个参数。将"%2B"被解释为一个格式化指令和你缺少以下参数。

也许你想使用Fprint