为了账号安全,请及时绑定邮箱和手机立即绑定

如何转换(类型 *bytes.Buffer)以用作 w.Write 的参数中的 []byte

如何转换(类型 *bytes.Buffer)以用作 w.Write 的参数中的 []byte

Go
皈依舞 2021-09-27 10:41:35
我正在尝试从服务器返回一些 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)


查看完整回答
反对 回复 2021-09-27
  • 2 回答
  • 0 关注
  • 464 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信