在 go 中,變參可以用于泛型函數(shù),允許創(chuàng)建可接受可變數(shù)量參數(shù)且適用于多種類型的泛型函數(shù)。例如,您可以創(chuàng)建泛型函數(shù) mode,它查找給定列表中出現(xiàn)次數(shù)最多的元素:mode 接受可變數(shù)量的 t 類型元素。它通過為每個元素創(chuàng)建 counts 來統(tǒng)計元素計數(shù)。然后它找出出現(xiàn)次數(shù)最多的元素,并將其作為 mode 返回。在 main 函數(shù)中,可以為字符串列表和整數(shù)列表調(diào)用 mode 函數(shù),它將分別返回出現(xiàn)次數(shù)最多的字符串和數(shù)字。
Go 中變參的泛型函數(shù)
前言
泛型在 Go 1.18 中引入,允許我們創(chuàng)建不依賴于特定類型參數(shù)的函數(shù)和類型。這篇博文將探討 Go 中變參是否適用于泛型函數(shù),并提供一個實戰(zhàn)案例。
變參
變參函數(shù)是接受可變數(shù)量參數(shù)的函數(shù)。在 Go 中,變參通常使用 ... 語法表示,例如:
func Sum(nums ...int) int {
sum := 0
for _, num := range nums {
sum += num
}
return sum
}
登錄后復(fù)制
泛型函數(shù)
泛型函數(shù)是參數(shù)類型可指定的函數(shù)。在 Go 中,泛型函數(shù)使用 [] 語法表示,例如:
func Max[T comparable](values ...T) T {
max := values[0]
for _, value := range values {
if value > max {
max = value
}
}
return max
}
登錄后復(fù)制
變參和泛型
變參和泛型在 Go 中可以一起使用,允許我們創(chuàng)建可接受可變數(shù)量參數(shù)且適用于多種類型的泛型函數(shù)。
實戰(zhàn)案例
任務(wù)目標(biāo):創(chuàng)建泛型函數(shù)來查找給定列表中出現(xiàn)次數(shù)最多的元素。
代碼:
import "fmt"
func Mode[T comparable](values ...T) T {
counts := map[T]int{}
var mode T
var maxCount int
// 統(tǒng)計元素計數(shù)
for _, value := range values {
counts[value]++
}
// 找出出現(xiàn)次數(shù)最多的元素
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
// 整數(shù)列表
nums := []int{1, 2, 3, 2, 4, 2, 5}
fmt.Println("最常見的數(shù)字:", Mode(nums...)) // 2
}
登錄后復(fù)制
說明:
Mode 函數(shù)是一個泛型函數(shù),接受可變數(shù)量的 T 類型元素。
它返回出現(xiàn)次數(shù)最多的元素,并在 counts 中統(tǒng)計每個元素的出現(xiàn)次數(shù)。
在 main 函數(shù)中,我們創(chuàng)建了兩個列表:一個字符串列表和一個整數(shù)列表,并為每個列表調(diào)用了 Mode 函數(shù)。
輸出顯示了出現(xiàn)次數(shù)最多的元素為 “apple”(對于字符串列表)和 2(對于整數(shù)列表)。






