package main
import "fmt"
// MyInt ~表示不仅支持int8, 还支持int8的衍生类型int8A和int8B
type MyInt interface {
int | ~int8 | int16 | int32 | int64
}
func getMaxNum[T MyInt](a, b T) T {
if a > b {
return a
}
return b
}
// 结构体
type AgeT interface {
int8 | int16
}
type NameE interface {
string
}
type User[T AgeT, E NameE] struct {
age T
name E
}
// 获取age
func (u *User[T, E]) GetAge() T {
return u.age
}
// 获取name
func (u *User[T, E]) GetName() E {
return u.name
}
// Get 泛型和switch配合使用时,无法通过编译,只能先将泛型赋值给interface才可以和switch配合使用
func Get[T any]() T {
var t T
var ti interface{} = &t
switch v := ti.(type) {
case *int:
*v = 18
}
return t
}
// 进行类型约束时就可以使用当前类
// 类型约束
type Number interface {
int64 | float64
}
func SumIntsNumbers[K comparable, V Number](m map[K]V) V {
var s V
for _, v := range m {
s += v
}
return s
}
func main() {
fmt.Println(getMaxNum(1, 2))
var u User[int8, string]
// 赋值
u.age = 18
u.name = "zhangsan"
// 调用方法
age := u.GetAge()
name := u.GetName()
// 输出结果 18 zhangsan
fmt.Println(age, name)
}
Golang泛型的简单使用
发布时间 2023-10-20 11:18:53作者: 朝阳1