Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengendalikan Fungsi Generik dengan Penunjuk Pelaksana Antara Muka dalam Go?

Bagaimana Mengendalikan Fungsi Generik dengan Penunjuk Pelaksana Antara Muka dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-31 01:28:09
asal
963 orang telah melayarinya

How to Handle Generic Functions with Interface-Implementing Pointers in 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()
}
Salin selepas log masuk

Kami mempunyai pelaksanaan antara muka ini sebagai penunjuk struktur:

type Aimpl struct {}

func (a *Aimpl) SomeMethod() {}
Salin selepas log masuk

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

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

Dengan pengubahsuaian ini, tandatangan pengendali perlu dilaraskan:

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

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

Dan ubah suai tandatangan pengendali sewajarnya:

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

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!

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