范型的使用:
package main
import "fmt"
// 第一种
func Add[T int|float32](t1,t2 T) T {
return t1 + t2
}
// 第二种
type Number interface{
int | float32
}
func SumNumbers[T Number](t1,t2 T) T {
return t1 + t2
}
func main() {
t1 := Add(1, 2)
fmt.Println("t1 is ", t1)
t2 := Add[float32](1.2, 3.6)
fmt.Println("t2 is ", t2)
t3 := SumNumbers(1, 2)
fmt.Println("t3 is ", t3)
t4 := SumNumbers[float32](1.2, 3.6)
fmt.Println("t4 is ", t4)
}
自定义范型:any: 指一切
package main
import "fmt"
type Vector[T any] []T
type NumSlice[T int | float64] []T
type M[K string, V any] map[K]V
func main() {
v := Vector[string]{"x","m","c"}
fmt.Printf("v: %v\n", v)
v2 := Vector[int]{1,3,4}
fmt.Printf("v2: %v\n", v2)
ns := NumSlice[int]{1, 2, 3, 4}
fmt.Printf("ns: %v\n", ns)
ns2 := NumSlice[float64]{11.1, 2.1, 3.1, 4.1}
fmt.Printf("ns2: %v\n", ns2)
m := M[string, int]{
"xz":11,
"yz":22,
}
fmt.Printf("m: %v\n", m)
}
范型通道
package main
import "fmt"
type Ch[T any] chan T
func main() {
ch := make(Ch[int], 1)
ch <- 10
res := <-ch
fmt.Printf("res: %d\n", res)
fmt.Printf("ch: %d\n", ch)
}