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) }