Rumah > pembangunan bahagian belakang > Golang > Mengapakah mencetak `bytes.Buffer` dalam Go kadangkala menunjukkan kandungan rentetan dan kadangkala menunjukkan perwakilan dalamannya?

Mengapakah mencetak `bytes.Buffer` dalam Go kadangkala menunjukkan kandungan rentetan dan kadangkala menunjukkan perwakilan dalamannya?

DDD
Lepaskan: 2024-12-13 10:28:26
asal
197 orang telah melayarinya

Why does printing a `bytes.Buffer` in Go sometimes show the string content and sometimes show its internal representation?

Gelagat Berbeza Semasa Mencetak bait.Penimbal dalam Go

Apabila menggunakan bait.Jenis Penampan, pengguna mungkin menghadapi gelagat berbeza semasa mencetak objek daripada jenis itu. Kod berikut:

buf := new(bytes.Buffer)
buf.WriteString("Hello world")
fmt.Println(buf)
Salin selepas log masuk

mencetak "Hello World", manakala kod ini:

var buf bytes.Buffer
buf.WriteString("Hello world")
fmt.Println(buf)
Salin selepas log masuk

mencetak yang berikut:

{[72 101 108 108 111 32 119 111 114 108 100] 0 [72 101 108 108 111 32 119 111 114 108 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 0}
Salin selepas log masuk

Percanggahan yang jelas ini timbul kerana kewujudan kaedah String() untuk jenis bait.Buffer. Apabila mencetak nilai jenis bait.Penimbal, kaedah String() dipanggil untuk menghasilkan perwakilan rentetan bagi nilai tersebut. Walau bagaimanapun, apabila mencetak nilai jenis bait.Penimbal, tiada kaedah sedemikian tersedia dan format lalai untuk struct digunakan, yang menghasilkan perwakilan yang dilihat di atas.

Tingkah laku yang berbeza diilustrasikan lagi oleh berikut:

type MyBuffer bytes.Buffer

func (b *MyBuffer) String() string {
    return "MyBuffer with " + b.String()
}

var b MyBuffer
b.WriteString("Hello world")
fmt.Println(b)
Salin selepas log masuk

Dalam kes ini, apabila nilai MyBuffer dicetak, kaedah String() tersuai dipanggil dan "MyBuffer with ..." awalan ditambahkan pada output, menunjukkan kesan pelaksanaan kaedah String().

Memahami gelagat ini adalah penting apabila bekerja dengan bait. Jenis penampan dalam Go, kerana ia mempengaruhi pemformatan output dan boleh membawa kepada hasil yang tidak dijangka jika tidak dikendalikan dengan betul.

Atas ialah kandungan terperinci Mengapakah mencetak `bytes.Buffer` dalam Go kadangkala menunjukkan kandungan rentetan dan kadangkala menunjukkan perwakilan dalamannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan