Penerima penunjuk untuk kaedah Golang
Di Golang, penerima merujuk kepada objek yang bertanggungjawab untuk mengendalikan panggilan kaedah. Mengikut jenis penerima, ia boleh dibahagikan kepada penerima nilai dan penerima penunjuk.
Dalam contoh yang diberikan, penerima kaedah SetSomeField ialah penerima nilai, yang bermaksud kaedah tersebut beroperasi pada salinan pembolehubah yang dicipta apabila kaedah itu dipanggil. Ini menyebabkan kaedah tidak dapat mengubah suai contoh sebenar tetapi hanya mengemas kini salinan, yang membawa kepada tingkah laku yang tidak dijangka.
Untuk menyelesaikan masalah ini, penerima kaedah SetSomeField perlu ditukar kepada penerima penunjuk. Penerima penunjuk membenarkan kaedah untuk mengubah suai contoh sebenar kerana mereka mengakses alamat ingatan kejadian secara langsung.
Walau bagaimanapun, ini akan mewujudkan masalah baharu: struktur tidak lagi melaksanakan antara muka. Ini kerana antara muka memerlukan kaedah SetSomeField untuk ditakrifkan sebagai penerima nilai dan penerima penunjuk tidak serasi.
Penyelesaian adalah untuk mencipta fungsi Cipta yang mengembalikan jenis penerima penuding dan kemudian menetapkan penuding ini kepada pembolehubah yang melaksanakan antara muka. Ini membenarkan kaedah untuk mengubah suai tika sebenar sambil masih mematuhi definisi antara muka:
package main import ( "fmt" ) type IFace interface { SetSomeField(newValue string) GetSomeField() string } type Implementation struct { someField string } func (i *Implementation) GetSomeField() string { return i.someField } func (i *Implementation) SetSomeField(newValue string) { i.someField = newValue } func Create() *Implementation { return &Implementation{someField: "Hello"} } func main() { var a IFace a = Create() a.SetSomeField("World") fmt.Println(a.GetSomeField()) }
Dengan menggunakan penerima penunjuk, kaedah SetSomeField boleh mengubah suai tika sebenar semasa masih melaksanakan antara muka. Ini memastikan kaedah tersebut mengubah keadaan objek seperti yang diharapkan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengubah suai Medan Struct melalui Kaedah Antara Muka Menggunakan Penerima Penunjuk dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!