Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mencipta Jenis Generik untuk Penunjuk Melaksanakan Antara Muka dalam Go?

Bagaimana untuk Mencipta Jenis Generik untuk Penunjuk Melaksanakan Antara Muka dalam Go?

Linda Hamilton
Lepaskan: 2024-12-29 20:40:18
asal
401 orang telah melayarinya

How to Create a Generic Type for a Pointer Implementing an Interface in Go?

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

  1. Isytiharkan antara muka dengan parameter jenis untuk menentukan bahawa jenis pelaksanaannya mestilah penunjuk kepada parameter jenisnya:
type A[P any] interface {
    SomeMethod()
    *P
}
Salin selepas log masuk
  1. Ubah suai pengendali tandatangan:
func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Salin selepas log masuk

Pilihan 2: Balut Antara Muka (Jika Mengubah Takrifan Tidak Mungkin)

  1. Buat antara muka pembalut yang membenamkan antara muka asal dan menambah penunjuk kepada jenisnya parameter:
type MyA[P any] interface {
    A
    *P
}
Salin selepas log masuk
  1. Ubah suai tandatangan pengendali untuk menerima antara muka yang dibalut:
func Handler[P any, T MyA[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Salin selepas log masuk

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) })
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan