Gelagat Berbeza Penimbal Bait Bercetak dalam Go
Dalam Go, mencetak bait.Nilai penimbal boleh menghasilkan output yang berbeza bergantung pada sama ada ia adalah penunjuk atau nilai biasa.
Apabila mencipta bait.Penimbal dengan baharu(bait.Penimbal), kami memperoleh penuding kepada penimbal. Mengakses kaedah String() nilai dan mencetaknya mengeluarkan kandungan penimbal: Hello World.
Walau bagaimanapun, menggunakan bait buf var.Buffer secara langsung mencipta nilai jenis bait.Buffer. Nilai ini tidak mempunyai kaedah String(), jadi format lalainya dicetak. Ini menghasilkan keluaran verbose: {[72 101 108 108 111 32 119 111 114 108 100] 0 [72 101 108 108 111 32 119 111 114 108 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 0 0] 0}.
Perbezaan ini timbul kerana Go menyemak kaedah String() semasa mencetak nilai. Jika ia wujud, kaedah digunakan untuk mendapatkan perwakilan nilai. Untuk nilai penunjuk, seperti *bytes.Buffer, kaedah String() tersedia, tetapi untuk nilai biasa seperti bytes.Buffer, ia tidak.
Berbeza dengan penunjuk, nilai biasa mempunyai format lalai yang berbeza apabila dicetak: {field0 field1 ...}, memaparkan medan mereka. Ini menerangkan output berbeza yang diperhatikan semasa mencetak bait. Nilai penimbal bergantung pada sama ada ia adalah penunjuk atau nilai biasa.
Atas ialah kandungan terperinci Mengapa Mencetak `bytes.Buffer` dalam Go Menghasilkan Keputusan Berbeza Bergantung pada Sama ada Ia Penunjuk atau Nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!