Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menggunakan Kaedah Dikongsi dengan Kekangan Jenis Kesatuan dalam Go Generics?
Kekangan Generik dalam Go: Menggunakan Kaedah Dikongsi untuk Jenis Kesatuan
Generik In Go (v1.18), jenis kekangan kesatuan membolehkan anda untuk menentukan set jenis yang boleh diberikan kepada parameter jenis generik. Walau bagaimanapun, menggunakan kaedah dikongsi untuk jenis ini boleh membawa kepada ralat.
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() // <- error }
Ralat berlaku kerana pengkompil tidak dapat mencari beberapa kaedah pada jenis kesatuan AB . Untuk menyelesaikan masalah ini, anda perlu menambahkan kaedah pada kekangan antara muka:
type AB interface { *A | *B some() bool } func some[T AB](x T) bool { return x.some() // works }
Ini mengehadkan jenis generik T kepada jenis yang melaksanakan kedua-dua *A dan *B, dan juga mentakrifkan beberapa kaedah.
Walau bagaimanapun, seperti yang dinyatakan dalam nota keluaran Go 1.18, ini adalah pengehadan sementara. Go 1.19 dijangka akan mengalih keluar sekatan ini, membenarkan pengkompil membuat kesimpulan secara automatik beberapa kaedah daripada jenis kesatuan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Kaedah Dikongsi dengan Kekangan Jenis Kesatuan dalam Go Generics?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!