我正在尝试从服务器返回一些 json,但使用以下代码收到此错误cannot use buffer (type *bytes.Buffer) as type []byte in argument to w.Write通过一点谷歌搜索,我找到了这个 SO 答案,但无法使其正常工作(请参阅带有错误消息的第二个代码示例)第一个代码示例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 jsonw.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.Writevar b bytes.Bufferfoo := 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)
2 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
Write 需要一个[]byte(字节片),并且您有一个*bytes.Buffer(指向缓冲区的指针)。
您可以使用Buffer.Bytes()从缓冲区获取数据并将其提供给Write():
_, err = w.Write(buffer.Bytes())
...或使用Buffer.WriteTo()将缓冲区内容直接复制到 a Writer:
_, err = buffer.WriteTo(w)
使用 abytes.Buffer并不是绝对必要的。 json.Marshal()[]byte直接返回一个:
var buf []byte
buf, err = json.Marshal(thing)
_, err = w.Write(buf)
- 2 回答
- 0 关注
- 464 浏览
添加回答
举报
0/150
提交
取消