golang 1.18开始的泛型基本解释

2022-10-09  本文已影响0人  哆啦在这A梦在哪

从constraints包的内容来看,Ordered这种接口类型就是一些可比较基础类型的集合(整数、浮点数、字符串),集合在golang中新引入前缀波浪号~表示,例如~string表示底层类型为string的所有type的集合(包括以这种方式定义的type: type MyString string)。

所以到目前为止,golang泛型的典型使用方式就是:constraints包 + 使用方括号包裹的类型参数。

内置的两种类型

1.any: 表示go里面所有的内置基本类型,等价于interface{}

2.comparable: 表示go里面所有内置的可比较类型:int、uint、float、bool、struct、指针等一切可以比较的类型
以下为官方的代码注解

image.png

翻译过来的直接是:
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

上一篇下一篇

猜你喜欢

热点阅读