Jenis Generik untuk Penunjuk Melaksanakan Antara Muka
Apabila bekerja dengan antara muka dalam Go, mungkin perlu menghantar penuding kepada struct yang melaksanakan antara muka. Ini boleh menjadi mencabar apabila mentakrifkan fungsi generik.
Soalan:
Bagaimanakah saya boleh mencipta jenis generik untuk penunjuk yang melaksanakan antara muka?
Jawapan:
Pilihan 1: Ubah suai Definisi Antara Muka
type A[P any] interface { SomeMethod() *P }
func Handler[P any, T A[P]](callback func(result T)) { result := new(P) callback(result) }
Pilihan 2: Balut Antara Muka (Jika Mengubah Takrifan Tidak Mungkin)
type MyA[P any] interface { A *P }
func Handler[P any, T MyA[P]](callback func(result T)) { result := new(P) callback(result) }
Penggunaan:
Kedua-dua pilihan membenarkan menghantar penunjuk kepada struct yang melaksanakan antara muka A kepada fungsi generik Pengendali. Contohnya:
type Aimpl struct {} func (a *Aimpl) SomeMethod() {} func main() { Handler(func(a *Aimpl) { fmt.Printf("%#v\n", a) }) }
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Jenis Generik untuk Penunjuk Melaksanakan Antara Muka dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!