Rumah > pembangunan bahagian belakang > Golang > Bolehkah Go Generics' Union Constraints Memanggil Kaedah Dikongsi Tanpa Pengisytiharan Antara Muka Eksplisit?

Bolehkah Go Generics' Union Constraints Memanggil Kaedah Dikongsi Tanpa Pengisytiharan Antara Muka Eksplisit?

Linda Hamilton
Lepaskan: 2024-12-22 16:34:13
asal
561 orang telah melayarinya

Can Go Generics' Union Constraints Call Shared Methods Without Explicit Interface Declaration?

Kaedah Memanggil tentang Kekangan Kesatuan dalam Go Generik

Dalam Go generik (v1.18), anda boleh menghadapi jenis kekangan kesatuan yang mengehadkan jenis parameter kepada jenis yang melaksanakan antara muka bersatu. Walau bagaimanapun, ketidakupayaan untuk memanggil kaedah dikongsi antara jenis yang dikekang menimbulkan kebimbangan tentang kegunaan kekangan tersebut.

Pertimbangkan kod berikut:

type A struct {}
type B struct {}
type AB interface { *A | *B }

func (a *A) some() bool { return true }
func (b *B) some() bool { return false }

func some[T AB](x T) bool { return x.some() } // Compiler error
Salin selepas log masuk

Ralat pengkompil "x.some undefined" adalah disebabkan oleh fakta bahawa kekangan kesatuan jenis *A | *B tidak menjamin kewujudan beberapa kaedah pada kedua-dua *A dan *B.

Untuk menyelesaikan isu ini, anda boleh menambah kaedah pada kekangan antara muka:

type AB interface { *A | *B; some() bool }

func some[T AB](x T) bool { return x.some() } // Works
Salin selepas log masuk

Ini mengehadkan T kepada jenis yang melaksanakan kedua-dua *A atau *B dan mengisytiharkan beberapa kaedah.

Walau bagaimanapun, penyelesaian ini dilihat sebagai penyelesaian untuk perkara yang sesuai dengan jenis kesatuan sekerja sahaja. Go 1.18 pada masa ini mempunyai had di mana pengkompil menyokong memanggil kaedah pada nilai parameter jenis P hanya jika kaedah m diisytiharkan secara eksplisit oleh antara muka kekangan P. Walaupun spesifikasi bahasa menyatakan bahawa set kaedah antara muka ialah persilangan set kaedah bagi setiap jenis dalam set jenis antara muka. Isu ini dijangka akan ditangani dalam Go 1.19.

Atas ialah kandungan terperinci Bolehkah Go Generics' Union Constraints Memanggil Kaedah Dikongsi Tanpa Pengisytiharan Antara Muka Eksplisit?. 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