package main
import (
"fmt"
"log"
)
type vector[T any] []T //泛 型切片
type M[k string | int, v any] map[k]v // 泛型map
type Maps[k comparable, v any] map[k]v // 泛型map
type C[T any] chan T // 泛型通道
type Person[T any] struct {
Name string
Sex T
}
// 定义一个any类型的参数
// T 就是any类型
func printSlice[T any](s []T) {
for _, V := range s {
fmt.Printf("%v \n", V)
}
}
func main() {
printSlice[int]([]int{66, 77, 88, 99, 100})
printSlice[string]([]string{"zhangsan", "lisi", "wangwu", "zhaosi"})
// 同时我们在使用的时候也可以省略显式类型
printSlice[int8]([]int8{1, 2, 3, 4})
printSlice([]int{66, 77, 88, 99, 100})
// 泛型切片
v := vector[int]{23, 34, 45}
printSlice(v)
// 泛型map
testMap()
// 泛型通道
testChan()
}
func testMap() {
m1 := M[string, string]{"key": "val"}
log.Println(m1)
m2 := M[string, int]{"key": 1}
log.Println(m2)
}
func testChan() {
c1 := make(C[int], 10)
c1 <- 1
log.Println(<-c1)
}
func same[T int | float64 | string](a, b T) bool {
return a == b
}
func funcss() {
b := same[string]("1", "2")
fmt.Println(b)
same(1, 2) // 隐士
}
func TestPeson() {
p := Person[int]{}
p.Name = "123"
p.Sex = 1
m := make(M[int, string])
m[123] = "123"
testMy[MyInt](23)
}
type MyType interface {
~int | float64 | string
}
// 波浪线可以 myint
type MyInt int
func testMy[t MyType](s t) {
log.Println(s)
}
golang 1.18泛型记录
最新推荐文章于 2023-05-20 00:16:48 发布
本文介绍了Go语言中的泛型概念,通过示例展示了如何创建泛型切片、泛型映射和泛型通道,并提供了相关函数的使用方法,如printSlice和testMap。此外,还涵盖了类型约束和接口的应用,如same函数和testChan。
124

被折叠的 条评论
为什么被折叠?



