Lelaran Melalui Kesatuan Kepingan dalam Fungsi Generik Tanpa Jenis Teras
Dalam Go 1.18, fungsi generik membolehkan kita bekerja dengan jenis secara dinamik. Walau bagaimanapun, menghadapi cabaran dalam mengulang kepingan yang terdiri daripada pelbagai jenis memerlukan pertimbangan tambahan.
Apabila menangani kekangan jenis, kita mesti memahami konsep jenis teras. Jenis teras wujud apabila satu jenis asas wujud untuk semua jenis dalam antara muka atau apabila semua saluran mempunyai jenis elemen dan arah yang sama.
Dalam contoh kod awal:
type NumberSlice interface { []int64 | []float64 }
The kekangan antara muka NumberSlice tidak mempunyai jenis teras kerana ia terdiri daripada berbilang jenis asas: []int64 dan []float64. Ini bermakna kita tidak boleh menjangkau hirisan antara muka ini.
Untuk mengatasi halangan ini, kita boleh mengubah suai antara muka untuk memerlukan jenis asas sebaliknya:
type Number interface { int64 | float64 } func add[N Number](n []N) { for _, v := range n { fmt.Println(v) } }
Ini membolehkan kami mengisytiharkan kepingan int64 atau float64 dan lelaran di atasnya dalam fungsi generik.
Sebagai alternatif, kita boleh menentukan antara muka yang lebih jelas dengan jenis teras:
type NumberSlice[N int64 | float64] interface { ~[]N } func add[S NumberSlice[N], N int64 | float64](n S) { for _, v := range n { fmt.Println(v) } }
Pendekatan ini memastikan antara muka mempunyai jenis asas yang diketahui iaitu []N untuk semua jenis yang melaksanakan NumberSlice[N].
Dengan membuat pelarasan ini, kami berjaya mengulangi atas kesatuan hirisan dalam fungsi generik, memberikan peningkatan fleksibiliti dalam kod kami.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulangi Kesatuan Kepingan dalam Fungsi Go Generik Tanpa Jenis Teras?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!