Rumah >pembangunan bahagian belakang >Golang >Mengapa `bytes.Buffer` Gagal Melaksanakan `io.Writer` dalam Go, dan Bagaimana Ia Boleh Dibetulkan?

Mengapa `bytes.Buffer` Gagal Melaksanakan `io.Writer` dalam Go, dan Bagaimana Ia Boleh Dibetulkan?

Barbara Streisand
Barbara Streisandasal
2024-12-09 13:57:121002semak imbas

Why Does `bytes.Buffer` Fail to Implement `io.Writer` in Go, and How Can It Be Fixed?

Melaksanakan io.Writer for String-Writing Objects

Dalam Go, kita selalunya perlu mencipta objek yang melaksanakan antara muka io.Writer untuk mengendalikan operasi menulis. Walau bagaimanapun, apabila cuba menggunakan bait.Penimbal, kekeliruan boleh timbul walaupun kaedah Tulis dilaksanakan.

Penjelasan Ralat

Mesej ralat "bait.Penimbal tidak not implement io.Writer" berlaku kerana bytes.Buffer mempunyai penerima penunjuk untuk Write kaedah:

func (b *Buffer) Write(p []byte) (n int, err error)

Ini bermakna kaedah mesti dipanggil pada penunjuk ke penimbal, bukan pada penimbal itu sendiri. Percubaan untuk menghantar penimbal secara terus, seperti yang ditunjukkan dalam coretan kod di bawah, menyebabkan ralat.

var b bytes.Buffer
foo := bufio.NewWriter(b)

Penyelesaian: Menghantar Penunjuk kepada Penampan

Untuk menyelesaikan ralat ini, kita perlu menghantar penunjuk kepada penimbal dan bukannya penimbal itu sendiri. Ini kerana bufio.NewWriter menjangkakan antara muka io.Writer, dan penuding kepada penimbal melaksanakan antara muka ini dengan betul.

var b bytes.Buffer
foo := bufio.NewWriter(&b) // Pass a pointer to the buffer

Dengan pengubahsuaian ini, atur cara akan berjaya mencipta penulis yang menulis kepada penimbal rentetan .

Atas ialah kandungan terperinci Mengapa `bytes.Buffer` Gagal Melaksanakan `io.Writer` dalam Go, dan Bagaimana Ia Boleh Dibetulkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn