golang 泛型demo
go 1.18版本新出的泛型
package main
import "fmt"
// ~代表衍生 如果不加~ 使用MyInt 作为int传入就会报错
type MyInt int
type AA interface {
~int | float64
}
// 定义一个泛型函数
func AddNum[T AA](a T, b T) T {
return a + b
}
// 定义一个泛型切片
type S[T int | float64] []T
// 定义一个泛型map
type M[K string, V any] map[K]V
// 定义一个泛型结构体
type St[T int | string, A int | bool] struct {
Name string
Data T
Sec A
}
// 定义一个泛型chan
type C[T int | string] chan T
func main() {
// 测试泛型函数
var t MyInt = 2
c1 := AddNum(4, t)
fmt.Println(c1)
c := AddNum(4, 5)
fmt.Println(c)
d := AddNum(4.0, 5.9)
fmt.Println(d)
// 测试泛型切片
v1 := S[int]{1, 2, 3, 4}
fmt.Println(v1)
v2 := S[float64]{1.0, 2.2, 3.3, 4.4}
fmt.Println(v2)
// 测试泛型map
m1 := M[string, int]{"key": 1}
fmt.Println(m1)
m2 := M[string, string]{"key": "valye"}
fmt.Println(m2)
// 测试泛型结构体
st1 := St[int, int]{
"xutao",
1,
1,
}
fmt.Println(st1)
st2 := St[string, bool]{
"zq",
"2022",
false,
}
fmt.Println(st2)
// 测试泛型chan
ch1 := make(C[int], 1)
ch1 <- 1
fmt.Println(<-ch1)
ch2 := make(C[string], 1)
ch2 <- "test"
fmt.Println(<-ch2)
}