Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Generik dalam Go Boleh Mengendalikan Fungsi dengan Parameter Antara Muka Berasaskan Penunjuk?

Bagaimanakah Generik dalam Go Boleh Mengendalikan Fungsi dengan Parameter Antara Muka Berasaskan Penunjuk?

Barbara Streisand
Lepaskan: 2024-12-29 00:36:09
asal
135 orang telah melayarinya

How Can Generics in Go Handle Functions with Pointer-Based Interface Parameters?

Antara Muka Generik Penunjuk

Dalam Go, mentakrifkan antara muka untuk pelaksanaan penuding boleh dilakukan melalui generik. Pertimbangkan senario berikut:

Masalah:

  • Anda mempunyai antara muka A dengan kaedah SomeMethod().
  • Anda mempunyai struct penunjuk *Aimpl yang melaksanakan antara muka A.
  • Anda ingin mencipta Pengendali fungsi generik yang menerima fungsi dengan parameter A dan memberikan penuding kepada Aimpl kepada parameternya.

Penyelesaian Menggunakan Antara Muka Generik dengan Parameter Jenis:

Untuk mencapai ini, anda boleh mengisytiharkan antara muka A dengan parameter jenis, memastikan bahawa jenis pelaksana adalah penunjuk kepada jenisnya parameter:

type A[P any] interface {
    SomeMethod()
    *P
}
Salin selepas log masuk

Kemudian, ubah suai tandatangan Pengendali seperti berikut:

func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Salin selepas log masuk

Penyelesaian Menggunakan Antara Muka Pembungkus:

Jika anda tidak boleh ubah suai takrifan A, anda boleh membungkusnya ke dalam antara muka anda sendiri MyA:

type MyA[P any] interface {
    A
    *P
}
Salin selepas log masuk

Kemudian, kemas kini tandatangan Pengendali untuk menggunakan antara muka MyA:

func Handler[P any, T MyA[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Generik dalam Go Boleh Mengendalikan Fungsi dengan Parameter Antara Muka Berasaskan Penunjuk?. 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