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
Barbara Streisandasal
2024-12-29 00:36:09114semak imbas

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
}

Kemudian, ubah suai tandatangan Pengendali seperti berikut:

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

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
}

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)
}

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!

Kenyataan:
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