Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Penerima Penunjuk Boleh Menyelesaikan Isu Pelaksanaan Antara Muka Go Apabila Mengubah Suai Nilai Contoh Dasar?
Penerima Penunjuk untuk Antara Muka dalam Go
Apabila menggunakan penerima kaedah dalam Go, penerima jenis penuding membolehkan kaedah mengubah suai yang sebenar nilai contoh penerima. Dalam kod yang diberikan, kami mempunyai antara muka IFace dengan dua kaedah, GetSomeField dan SetSomeField. Struktur Pelaksanaan melaksanakan IFace dan mempunyai kaedah dengan penerima nilai, bermakna ia beroperasi pada salinan contoh.
Untuk meningkatkan gelagat, kita perlu mengubah suai penerima kaedah untuk SetSomeField menjadi jenis penunjuk, supaya kita boleh memanipulasi contoh sebenar. Walau bagaimanapun, ini membawa kepada ralat kompilasi di mana Pelaksanaan tidak dapat melaksanakan IFace kerana kaedah SetSomeField mempunyai penerima penunjuk.
Penyelesaian terletak pada memastikan penunjuk kepada struct melaksanakan antara muka. Dengan berbuat demikian, kami boleh mengubah suai medan contoh sebenar tanpa membuat salinan. Berikut ialah kod yang diubah suai:
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 pengubahsuaian ini, kami membolehkan penuding kepada Pelaksanaan melaksanakan IFace, membolehkan kami mengubah suai contoh sebenar tanpa membuat salinan.
Atas ialah kandungan terperinci Bagaimanakah Penerima Penunjuk Boleh Menyelesaikan Isu Pelaksanaan Antara Muka Go Apabila Mengubah Suai Nilai Contoh Dasar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!