Подтвердить что ты не робот

Как преобразовать (введите * 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)
4b9b3361

Ответ 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)