Как преобразовать (введите * bytes.Buffer) для использования в качестве [] байта в аргументе w.Write
Я пытаюсь вернуть 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
2-й пример кода с ошибкой
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)
Ответы
Ответ 1
Для записи требуется []byte
(фрагмент байтов), и у вас есть *bytes.Buffer
(указатель на буфер).
Вы можете получить данные из буфера с помощью Buffer.Bytes() и предоставить это Write()
:
_, err = w.Write(buffer.Bytes())
... или используйте Buffer.WriteTo(), чтобы скопировать содержимое буфера непосредственно в Writer
:
_, err = buffer.WriteTo(w)
Использование bytes.Buffer
не является строго необходимым. json.Marshal() возвращает []byte
напрямую:
var buf []byte
buf, err = json.Marshal(thing)
_, err = w.Write(buf)