Menulis Fungsi Generik untuk Jenis Berangka dalam Go
Dalam Go, apabila bekerja dengan jenis berangka yang berbeza seperti int dan float64, anda perlu membuat fungsi jenis khusus atau menukar nilai kepada jenis biasa. Pendekatan yang lebih elegan ialah menulis fungsi generik menggunakan parameter jenis dan kekangan antara muka.
Menggunakan Parameter Jenis dan Kekangan Nombor
Dalam Go 1.18 dan ke atas, anda boleh menentukan fungsi generik dengan parameter jenis T dan mengekang T kepada antara muka Nombor, ditakrifkan sebagai berikut:
import "golang.org/x/exp/constraints" type Number interface { constraints.Integer | constraints.Float }
Kekangan ini termasuk semua jenis integer yang ditandatangani dan tidak ditandatangani, serta jenis apungan. Fungsi generik anda boleh ditulis sebagai:
func add[T Number](a, b T) T { return a + b }
Memanggil Fungsi Generik
Dengan fungsi generik ini, anda kini boleh melakukan operasi aritmetik pada mana-mana dua argumen jenis berangka . Contohnya:
a := 1 b := 2.5 fmt.Println(add(a, b)) // 3.5
Keterbatasan
Perhatikan bahawa argumen kepada fungsi generik mesti mempunyai jenis yang sama. Selain itu, operasi yang boleh dilakukan dalam fungsi adalah terhad kepada yang disokong oleh semua jenis dalam kekangan Nombor (iaitu, , -, *, dan /).
Mengendalikan Nombor Kompleks
Go juga menyokong jenis kompleks (complex64 dan complex128). Jika anda ingin memasukkannya dalam fungsi generik anda, anda boleh mengembangkan kekangan Nombor untuk memasukkan kekangan.Kompleks:
type Number interface { constraints.Integer | constraints.Float | constraints.Complex }
Ingat bahawa pengendali aritmetik dalam Go disokong oleh jenis kompleks juga, kecuali untuk % operator dan operator bitwise, yang hanya disokong oleh jenis integer.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menulis Fungsi Generik dalam Pergi untuk Mengendalikan Jenis Berangka Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!