Go Struct Field Reverting Conundrum: Menyelidiki Penunjuk dan Penerima
Dalam Go, pembangun sering menghadapi situasi pelik di mana nilai medan dalam struct secara misteri kembali kepada keadaan asalnya selepas diubah suai. Isu ini berpunca daripada konsep menghantar nilai melalui salinan, bukannya melalui rujukan.
Pertimbangkan contoh yang disediakan:
func (this MockConnector) sendCommand(payload map[string]string)
Di sini, kaedah sendCommand dalam struct MockConnector menerima muatan sebagai suatu nilai. Apabila kaedah mengubah suai muatan ini, ia hanya mempengaruhi salinan, bukan medan struct asal.
Untuk menyelesaikan masalah ini, Go memerlukan penggunaan penunjuk kepada struktur yang perlu diubah suai. Dengan mengubah suai tandatangan kaedah kepada:
func (this *MockConnector) sendCommand(payload map[string]string)
kami kini menghantar penunjuk kepada struct, membolehkan kami mengubah suai terus medan yang dimaksudkan.
Selain itu, dalam Go, tidak digalakkan untuk gunakan ini sebagai nama penerima. Sebaliknya, ia dianggap amalan terbaik untuk semua kaedah dalam jenis tertentu untuk menggunakan penerima penunjuk. Ini memastikan antara muka yang konsisten tanpa mengira sama ada nilai itu penunjuk atau tidak.
Dengan menerima prinsip ini, pembangun boleh mengatasi isu "membalikkan medan" dengan berkesan, memastikan medan struktur mereka mencerminkan pengubahsuaian yang dimaksudkan dengan tepat.
Atas ialah kandungan terperinci Mengapa Nilai Medan Go Struct Saya Berbalik Selepas Pengubahsuaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!