Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menulis Fungsi Generik dalam Pergi untuk Mengendalikan Jenis Berangka Berbeza?

Bagaimanakah Saya Boleh Menulis Fungsi Generik dalam Pergi untuk Mengendalikan Jenis Berangka Berbeza?

Linda Hamilton
Lepaskan: 2024-12-20 07:54:14
asal
843 orang telah melayarinya

How Can I Write Generic Functions in Go to Handle Different Numerical Types?

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan