Rumah >pembangunan bahagian belakang >Golang >Bagaimana Mengendalikan Fungsi Generik dengan Penunjuk Pelaksana Antara Muka dalam Go?
Jenis Generik untuk Penunjuk Pelaksanaan Antara Muka
Dalam Go, mencipta fungsi generik yang mengambil fungsi dengan parameter antara muka boleh mencabar apabila pelaksanaan antara muka itu adalah penunjuk kepada struct.
Pertimbangkan perkara berikut antara muka:
type A interface { SomeMethod() }
Kami mempunyai pelaksanaan antara muka ini sebagai penunjuk struktur:
type Aimpl struct {} func (a *Aimpl) SomeMethod() {}
Kami ingin menentukan fungsi generik yang mengambil fungsi dengan parameter A:
func Handler[T A](callback func(result T)) { // Essentially what I'd like to do is result := &Aimpl{} (or whatever T is) callback(result) }
Walau bagaimanapun, ralat timbul kerana keputusan tidak melaksanakan antara muka; ia adalah penunjuk kepada jenis, bukan jenis itu sendiri.
Penyelesaian 1: Antara Muka dengan Parameter Jenis
Untuk menyelesaikan masalah ini, kami boleh mengisytiharkan antara muka dengan parameter jenis , memerlukan jenis yang melaksanakannya menjadi penunjuk kepada parameter jenisnya:
type A[P any] interface { SomeMethod() *P }
Dengan pengubahsuaian ini, tandatangan pengendali perlu dilaraskan:
func Handler[P any, T A[P]](callback func(result T)) { result := new(P) callback(result) }
Penyelesaian 2: Antara Muka Pembungkus
Jika mengubah suai takrifan A bukan satu pilihan, kita boleh mencipta antara muka pembungkus :
type MyA[P any] interface { A *P }
Dan ubah suai tandatangan pengendali sewajarnya:
func Handler[P any, T MyA[P]](callback func(result T)) { result := new(P) callback(result) }
Atas ialah kandungan terperinci Bagaimana Mengendalikan Fungsi Generik dengan Penunjuk Pelaksana Antara Muka dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!