Kaedah Golang dengan Penerima Penunjuk [Pendua]
Masalah:
In Go, bila mencipta kaedah dengan penerima penunjuk dan melaksanakan antara muka, ralat berikut boleh berlaku:
cannot use obj (type Implementation) as type IFace in return argument: Implementation does not implement IFace (GetSomeField method has pointer receiver)
Jawapan:
Untuk menyelesaikan ralat ini, pastikan penunjuk kepada struct melaksanakan antara muka. Ini membenarkan kaedah mengubah suai medan kejadian sebenar tanpa membuat salinan.
Pengubahsuaian Kod:
Ganti baris yang menyinggung dengan:
return &obj
Penjelasan:
Dengan mengembalikan penunjuk ke struct, ia melaksanakan antara muka sambil membenarkan kaedah mengubah suai kejadian sebenar.
Contoh (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 menggunakan penerima penunjuk dan memastikan penunjuk melaksanakan antara muka, anda boleh berjaya mengubah suai contoh sebenar struct sambil melaksanakan kaedah yang diperlukan.
Atas ialah kandungan terperinci Mengapa Kaedah My Go dengan Penerima Penunjuk Gagal Melaksanakan Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!