我正在尝试从服务器返回一些json,但是使用以下代码获取此错误
cannot use buffer (type *bytes.Buffer) as type []byte in argument to w.Write
稍加谷歌搜索,我找到了这个答案,但无法使其正常工作(请参阅第二个代码示例,并显示错误消息)
第一个代码样本
buffer := new(bytes.Buffer) for _, jsonRawMessage := range sliceOfJsonRawMessages{ if err := json.Compact(buffer, jsonRawMessage); err != nil{ fmt.Println("error") } } fmt.Println("json returned", buffer)//this is json w.Header().Set("Content-Type", contentTypeJSON) w.Write(buffer)//error: cannot use buffer (type *bytes.Buffer) as type []byte in argument to w.Write
第二个代码示例有错误
cannot use foo (type *bufio.Writer) as type *bytes.Buffer in argument to json.Compact cannot use foo (type *bufio.Writer) as type []byte in argument to w.Write var b bytes.Buffer foo := bufio.NewWriter(&b) for _, d := range t.J{ if err := json.Compact(foo, d); err != nil{ fmt.Println("error") } } w.Header().Set("Content-Type", contentTypeJSON) w.Write(foo)
写操作需要一个[]byte(字节片),而您有一个*bytes.Buffer(指向缓冲区的指针)。
[]byte
*bytes.Buffer
您可以使用Buffer.Bytes()从缓冲区中获取数据,并将其提供给Write():
Write()
_, err = w.Write(buffer.Bytes())
…或使用Buffer.WriteTo()将缓冲区内容直接复制到Writer:
Writer
_, err = buffer.WriteTo(w)
使用a bytes.Buffer并非绝对必要。 json.Marshal()[]byte直接返回一个:
bytes.Buffer
var buf []byte buf, err = json.Marshal(thing) _, err = w.Write(buf)