Rumah > Artikel > pembangunan bahagian belakang > Bolehkah parameter pembolehubah golang digunakan dalam fungsi generik?
Dalam Go, parameter pembolehubah boleh digunakan untuk fungsi generik, membenarkan penciptaan fungsi generik yang menerima nombor pembolehubah parameter dan sesuai untuk pelbagai jenis. Sebagai contoh, anda boleh mencipta Mod fungsi generik yang mencari elemen yang paling kerap berlaku dalam senarai tertentu: Mod menerima bilangan pembolehubah unsur jenis T. Ia mengira elemen dengan membuat kiraan untuk setiap elemen. Kemudian ia mencari elemen yang paling banyak muncul dan mengembalikannya sebagai mod. Dalam fungsi utama, anda boleh memanggil fungsi Mod untuk senarai rentetan dan senarai integer, yang masing-masing akan mengembalikan rentetan dan nombor yang paling kerap.
Fungsi generik dengan parameter variadik dalam Go
Prakata
Generik telah diperkenalkan dalam Go 1.18, membenarkan kami mencipta fungsi dan jenis parameter yang tidak jenis semula tertentu Catatan blog ini akan meneroka sama ada parameter pembolehubah dalam Go sesuai untuk fungsi generik dan menyediakan kes praktikal.
Varameters
Fungsi variadik ialah fungsi yang menerima nombor pembolehubah parameter. Dalam Go, parameter pembolehubah biasanya dinyatakan menggunakan sintaks ...
, contohnya: ...
语法表示,例如:
func Sum(nums ...int) int { sum := 0 for _, num := range nums { sum += num } return sum }
泛型函数
泛型函数是参数类型可指定的函数。在 Go 中,泛型函数使用 []
语法表示,例如:
func Max[T comparable](values ...T) T { max := values[0] for _, value := range values { if value > max { max = value } } return max }
变参和泛型
变参和泛型在 Go 中可以一起使用,允许我们创建可接受可变数量参数且适用于多种类型的泛型函数。
实战案例
任务目标:创建泛型函数来查找给定列表中出现次数最多的元素。
代码:
import "fmt" func Mode[T comparable](values ...T) T { counts := map[T]int{} var mode T var maxCount int // 统计元素计数 for _, value := range values { counts[value]++ } // 找出出现次数最多的元素 for value, count := range counts { if count > maxCount { maxCount = count mode = value } } return mode } func main() { // 字符串列表 strs := []string{"apple", "orange", "apple", "pear", "banana"} fmt.Println("最常见的字符串:", Mode(strs...)) // apple // 整数列表 nums := []int{1, 2, 3, 2, 4, 2, 5} fmt.Println("最常见的数字:", Mode(nums...)) // 2 }
说明:
Mode
函数是一个泛型函数,接受可变数量的 T
类型元素。counts
中统计每个元素的出现次数。main
函数中,我们创建了两个列表:一个字符串列表和一个整数列表,并为每个列表调用了 Mode
rrreee[]
, contohnya: 🎜rrreee🎜🎜Parameter pembolehubah dan generik🎜🎜🎜Parameter pembolehubah dan generik boleh digunakan bersama dalam Go, membolehkan kami mencipta Generik fungsi yang menerima bilangan argumen yang berubah-ubah dan berfungsi dengan banyak jenis. 🎜🎜🎜Kes Praktikal🎜🎜🎜🎜Objektif Tugasan: 🎜Mencipta fungsi generik untuk mencari elemen yang paling banyak kejadian dalam senarai yang diberikan. 🎜🎜🎜Kod: 🎜🎜rrreee🎜🎜Penerangan: 🎜🎜T
. 🎜🎜Ia mengembalikan elemen dengan kejadian terbanyak dan mengira kejadian setiap elemen dalam utama
, kami mencipta dua senarai: senarai rentetan dan senarai integer dan memanggil fungsi Mod
untuk setiap senarai. 🎜🎜Output menunjukkan bahawa unsur yang paling kerap ialah "epal" (untuk senarai rentetan) dan 2 (untuk senarai integer). 🎜🎜Atas ialah kandungan terperinci Bolehkah parameter pembolehubah golang digunakan dalam fungsi generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!