我是Go的新手,无法弄清楚如何打印出我创建的JSON.我正在使用"encoding/json"并且返回了一个[]字节.然而,当我打印出来时,我得到:
cannot use json_msg (type []byte) as type string in function argument
Run Code Online (Sandbox Code Playgroud)
收到此消息后,我试图将[]字节数组转换为字符串或空接口.但是我似乎无法让它发挥作用.有任何想法吗?相关代码如下:
type Message struct {
Id int
Name string
}
for _, row := range rows {
m := Message{row.Int(0), row.Str(1)}
json_msg, err := json.Marshal(m)
if err == nil {
panic(err)
}//if
//tried below to print out a interface, didn't work either
//var f interface{}
//err = json.Unmarshal(json_msg, &f)
fmt.Fprintf(c.ResponseWriter, json_msg)
}//for
Run Code Online (Sandbox Code Playgroud)
jor*_*lli 12
有一些方法可以满足您的需求.
首先,直接回答你的问题,fmt.Fprintf如果是类型func(io.Writer, string, ...interface{}).既然你已经c.ResponseWriter进入它,我认为这是满足的io.Writer.第二个参数fmt.Fprintf是格式字符串.如果你想打印一些字符串,你可以使用%s格式字符串,所以你想要的是:
fmt.Fprintf(c.ResponseWriter, "%s", json_msg)
Run Code Online (Sandbox Code Playgroud)
直接回答你的问题,但让我们更进一步:是解决你正在解决的问题的正确方法吗?不,不是真的; 这样做有点奇怪.
首先,因为我们知道fmt.Fprintf接受io.Writer,我们正在谈论一种形式的方法Write([]byte) (int, error).你可以通过直接调用方法将[]byte数据写入:ResponseWriterWrite()ResponseWriter
_, err := c.ResponseWriter.Write(json_msg)
Run Code Online (Sandbox Code Playgroud)
这有点尴尬.事实证明,有一种更好的方法可以做到这一点:使用a json.Encoder.阿json.Encoder是一个结构嵌入的io.Writer,从而有效地增加了任何io.Writer结构的Encode方法,该方法将编码结构为JSON,并将其写入到写入.不同之处在于,您所做的是将数据编码到内存中的字节片,然后将其复制到一个io.Writer,当您可以直接写入时,如下所示:
err := json.NewEncoder(c.ResponseWriter).Encode(m)
Run Code Online (Sandbox Code Playgroud)
现在你甚至没有那种中间[]byte格式.