美文网首页
golang 1.18开始的泛型基本解释

golang 1.18开始的泛型基本解释

作者: 哆啦在这A梦在哪 | 来源:发表于2022-10-09 17:21 被阅读0次

    从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

    相关文章

      网友评论

          本文标题:golang 1.18开始的泛型基本解释

          本文链接:https://www.haomeiwen.com/subject/ewvbortx.html