Rumah > pembangunan bahagian belakang > Golang > Mengapa Mencetak `bytes.Buffer` dalam Go Menghasilkan Keputusan Berbeza Bergantung pada Sama ada Ia Penunjuk atau Nilai?

Mengapa Mencetak `bytes.Buffer` dalam Go Menghasilkan Keputusan Berbeza Bergantung pada Sama ada Ia Penunjuk atau Nilai?

Mary-Kate Olsen
Lepaskan: 2024-11-19 15:53:02
asal
713 orang telah melayarinya

Why Does Printing a `bytes.Buffer` in Go Produce Different Results Depending on Whether It's a Pointer or a Value?

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan