从constraints包的内容来看,Ordered这种接口类型就是一些可比较基础类型的集合(整数、浮点数、字符串),集合在golang中新引入前缀波浪号~表示,例如~string
表示底层类型为string的所有type的集合(包括以这种方式定义的type: type MyString string)。
所以到目前为止,golang泛型的典型使用方式就是:constraints包 + 使用方括号包裹的类型参数。
内置的两种类型
1.any: 表示go里面所有的内置基本类型,等价于interface{}
2.comparable: 表示go里面所有内置的可比较类型:int、uint、float、bool、struct、指针等一切可以比较的类型
以下为官方的代码注解
翻译过来的直接是:
any 代表所有
comparable 代表所有课比较类型。由这个单词也可以看出来,用的比较这个单词,注意最后一句话,comparable只能用于类型约束
Example
type Set[T comparable] struct {
cache map[T]any
}
type Session[T comparable] struct {
cache map[T]any
}
func main() {
newSet[string]()
newSession[string]()
s := newSet[string]// 先实例化,类似方法调用
s()
n := newSession[string]
n("a", "b")
}
func newSet[T comparable]() *Set[T] {
return &Set[T]{
cache: make(map[T]any),
}
}
func newSession[T comparable](arg ...T) *Session[T] {
log.Println(arg)
return &Session[T]{cache: make(map[T]any)}
}
官方文档
https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
网友评论