Apabila menulis program Go, anda mungkin menghadapi keperluan untuk mencipta fungsi yang boleh menerima sebarang jenis berangka, tidak kira sama ada ia adalah integer atau apungan. Ini boleh mencabar kerana Go membezakan antara jenis ini dengan tegas.
Satu pendekatan ialah menukar semua hujah berangka kepada float64 kerana jenis ini merangkumi julat integer. Walau bagaimanapun, ini mungkin tidak selalu diingini, kerana ia mungkin menyebabkan kehilangan ketepatan atau ralat apabila berurusan dengan integer yang besar.
Pilihan lain ialah mencipta fungsi berasingan untuk setiap berangka jenis, seperti addInt untuk integer dan addFloat untuk terapung. Walaupun ini memastikan keselamatan jenis, ia boleh membawa kepada masalah penduaan kod dan penyelenggaraan.
Dengan pengenalan parameter jenis dalam Go 1.18, lebih banyak penyelesaian elegan kini tersedia. Anda boleh mentakrifkan fungsi generik yang mengambil sebarang jenis T dan menggunakan kekangan antara muka untuk mengehadkan T kepada jenis angka.
Contohnya:
func add[T Number](a, b T) T { return a + b } type Number interface { constraints.Integer | constraints.Float }
Fungsi ini boleh digunakan dengan sebarang jenis angka, termasuk int, int64, float32 dan float64. Kekangan Nombor memastikan bahawa hanya jenis angka dibenarkan.
Perlu diingat bahawa fungsi generik memerlukan hujah daripada jenis yang sama. Sebagai contoh, fungsi tambah memerlukan kedua-dua argumen menjadi jenis angka yang sama. Selain itu, fungsi generik tidak menyokong semua operator, terutamanya yang khusus untuk jenis tertentu (cth., operator bitwise untuk integer).
Menggunakan parameter jenis dan kekangan antara muka membolehkan anda menulis fungsi generik yang boleh menerima sebarang jenis berangka. Pendekatan ini menyediakan keselamatan jenis sambil mengelakkan pertindihan kod dan menawarkan fleksibiliti yang lebih besar.
Atas ialah kandungan terperinci Bagaimana Saya Boleh Menulis Fungsi Generik dalam Go to Handle Mana-mana Jenis Berangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!