GO基础-泛型
大约 1 分钟
泛型
Go一直强调简洁性和可读性,对于泛型一直持保守态度。然而,在经过长时间的讨论和设计之后,泛型终于在Go 1.18版本中被引入。这一特性的设计旨在使代码更清晰、更具表达力。
泛型切片
package main
type MySlice[T any] []T
func main() {
var mySlice MySlice[string]
mySlice = append(mySlice, "拟好")
var intSlice MySlice[int]
intSlice = append(intSlice, 2)
}
泛型map
package main
import "fmt"
type MyMap[K string | int, V any] map[K]V
func main() {
var myMap = make(MyMap[string, string])
myMap["name"] = "拟好"
fmt.Println(myMap)
}
泛型结构体
package main
import (
"fmt"
)
// 使用空接口来接受任意类型
type Struct1 struct {
Title string
Content interface{}
}
func main() {
// 定义不同类型的实例
var strInstance Struct1
strInstance.Title = "String Example"
strInstance.Content = "Hello, World!"
var intInstance Struct1
intInstance.Title = "Integer Example"
intInstance.Content = 42
var floatInstance Struct1
floatInstance.Title = "Float Example"
floatInstance.Content = 3.14
// 输出实例信息
printStructInfo(strInstance)
printStructInfo(intInstance)
printStructInfo(floatInstance)
}
// 使用空接口的函数,用于打印 Struct1 的信息
func printStructInfo(s Struct1) {
fmt.Printf("%s: %v\n", s.Title, s.Content)
}
泛型函数
package main
import (
"fmt"
)
// 定义一个约束,表示可以加法运算的类型
type numeric interface {
~int | ~int8 | ~int16 | ~int32 | ~int64 |
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 |
~uintptr | ~float32 | ~float64
}
// 泛型函数 sum,用于计算多个数值类型的和
func sum[T numeric](nums ...T) T {
var total T
for _, num := range nums {
total += num
}
return total
}
func main() {
// 测试不同类型的求和
intSum := sum(1, 2, 3, 4)
floatSum := sum(1.5, 2.5, 3.5)
// 打印结果
fmt.Printf("Sum of integers: %v\n", intSum)
fmt.Printf("Sum of floats: %v\n", floatSum)
}