Rumah > Artikel > pembangunan bahagian belakang > Mengapa Medan Go Struct Saya Berbalik kepada Nilai Asalnya Apabila Diubah Suai?
Struct Field Reversion dalam Go
Apabila cuba mengubah suai medan dalam struct dalam program Go, anda mungkin menghadapi senario di mana medan nampaknya kembali kepada nilai asalnya. Isu ini timbul disebabkan oleh cara struktur dihantar mengikut nilai dalam Go.
Dalam kod anda, struct MockConnector mempunyai dua medan: last_command dan nilai. Kaedah sendCommand MockConnector mengubah suai medan ini. Walau bagaimanapun, apabila anda memanggil manager.sendMessage daripada struct TVManager, anda menghantar contoh penyambung sebagai nilai. Ini bermakna sendCommand menerima salinan struct penyambung, bukannya rujukan kepada yang asal.
Untuk menyelesaikan isu ini, anda perlu menggunakan penunjuk kepada struktur yang terlibat. Dengan menghantar penunjuk kepada struktur, anda menghantar rujukan kepada struktur sebenar dalam ingatan. Ini membolehkan anda mengubah suai medan struktur secara langsung.
Kod Dibetulkan:
func (this *MockConnector) sendCommand(payload map[string]string) { fmt.Println("0", this) this.last_command = payload this.value = true fmt.Println("0", this) }
Dengan mengubah suai kaedah sendCommand untuk menerima penunjuk kepada struct MockConnector, anda kini mengubah suai contoh penyambung sebenar dan bukannya hanya salinan.
Penerima Nama:
Selain itu, ia dianggap sebagai amalan terbaik untuk mengelak daripada menggunakan ini sebagai nama penerima dalam kaedah struct Go. Sebaliknya, gunakan nama yang lebih deskriptif untuk menunjukkan jenis penerima.
Set Kaedah Konsisten:
Jika satu kaedah dalam struct memerlukan penerima penunjuk, adalah disyorkan untuk buat semua kaedah dalam struct itu menggunakan penerima penunjuk. Ini memastikan ketekalan dalam set kaedah, tidak kira sama ada penerima ialah nilai atau penunjuk.
Dengan menggunakan pengesyoran ini, anda boleh menghapuskan isu nilai medan berbalik dalam program Go anda.
Atas ialah kandungan terperinci Mengapa Medan Go Struct Saya Berbalik kepada Nilai Asalnya Apabila Diubah Suai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!