Rumah >pembangunan bahagian belakang >Golang >Bagaimana Mengendalikan Kesatuan Slice dalam Fungsi Generik Go?
Mengendalikan Kesatuan Slices dalam Fungsi Generik dengan Kekangan Antara Muka
Andaikan anda memerlukan fungsi generik yang beroperasi pada sama ada sekeping integer atau kepingan terapung. Untuk melaksanakan ini, anda boleh menggunakan generik dan kekangan antara muka seperti yang ditunjukkan di bawah:
package main import "fmt" // NumberSlice defines an interface for either slice of integers or slice of floats. type NumberSlice interface { []int | []float64 } // add is a generic function that iterates over a slice of NumberSlice and prints its values. func add[N NumberSlice](n N) { for _, v := range n { fmt.Println(v) } } func main() { ints := []int{1, 2} add(ints) floats := []float64{3.14, 1.618} add(floats) }
Walau bagaimanapun, apabila cuba menjalankan kod di atas, anda mungkin menghadapi ralat berikut:
cannot range over n (variable of type N constrained by NumberSlice) (N has no core type)
Ralat ini timbul kerana antara muka NumberSlice tidak mempunyai jenis teras. Jenis teras untuk antara muka ialah jenis asas tunggal yang mesti diwarisi oleh semua jenis dalam antara muka. Memandangkan NumberSlice boleh menerima kedua-dua kepingan integer dan kepingan terapung, ia tidak memenuhi keperluan ini.
Untuk menangani isu ini, anda boleh menentukan antara muka menggunakan jenis asas dan bukannya kepingan:
type Number interface { int | float64 } func add[N Number](n []N) { for _, v := range n { fmt.Println(v) } }
Fungsi diubah suai ini mengambil sekeping elemen Nombor sebagai parameter, membolehkannya mengendalikan kedua-dua integer dan terapung dengan cekap.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Kesatuan Slice dalam Fungsi Generik Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!