Просто використовуйте
foo := bufio.NewWriter(&b)
Тому що спосіб bytes.Buffer реалізує io.Writer є
func (b *Buffer) Write(p []byte) (n int, err error) {
...
}
// io.Writer definition
type Writer interface {
Write(p []byte) (n int, err error)
}
Це b *Buffer, ні b Buffer. (Я також думаю, що це дивно, оскільки ми можемо викликати метод змінною або її вказівником, але ми не можемо призначити вказівник змінній типу, що не вказує.)
Крім того, запит компілятора недостатньо зрозумілий:
bytes.Buffer does not implement io.Writer (Write method has pointer receiver)
Деякі ідеї. Перейдіть Passed by value, якщо ми переходимо bдо buffio.NewWriter(), в NewWriter (), це новий b(новий буфер), а не оригінальний буфер, який ми визначили, тому нам потрібно передати адресу&b .
Додайте ще раз, байти. Буфер визначено:
type Buffer struct {
buf []byte // contents are the bytes buf[off : len(buf)]
off int // read at &buf[off], write at &buf[len(buf)]
bootstrap [64]byte // memory to hold first slice; helps small buffers avoid allocation.
lastRead readOp // last read operation, so that Unread* can work correctly.
}
використовуючи passed by valueнову структуру буфера, що відрізняється від змінної буфера початкової.