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

我正在尝试从服务器返回一些 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 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)


皈依舞
浏览 465回答 2
2回答

汪汪一只猫

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 []bytebuf, err = json.Marshal(thing)_, err = w.Write(buf)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go