Mengapa Medan Go Struct Saya Berbalik kepada Nilai Asalnya Apabila Diubah Suai?

Linda Hamilton
Lepaskan: 2024-11-15 15:45:02
asal
768 orang telah melayarinya

Why Does My Go Struct Field Revert to Its Original Value When Modified?

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)
}
Salin selepas log masuk

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!

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