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)
mencetak "Hello World", manakala kod ini:
var buf bytes.Buffer buf.WriteString("Hello world") fmt.Println(buf)
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}
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)
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!