golang新特性:泛型

泛型

  • Go的泛型(或者或类型形参)目前可使用在3个地方
    • 泛型类型 - 类型定义中带类型形参的类型
    • 泛型receiver - 泛型类型的receiver
    • 泛型函数 - 带类型形参的函数
  • 为了实现泛型,Go引入了一些新的概念:
    • 类型形参
    • 类型形参列表
    • 类型实参
    • 类型约束
    • 实例化 - 泛型类型不能直接使用,要使用的话必须传入类型实参进行实例化
  • 以下三个典型位置无法自定义泛型(但是可以使用别处定义好的泛型)
    • 匿名结构体
    • 匿名函数
    • 方法
  • Go1.18开始就是依据泛型的引入将接口的定义正式更改为了 类型集(Type set)
  • 接口可以不止书写一行,如果一个接口有多行类型定义,那么取它们之间的 交集
  • 虽然空接口内没有写入任何的类型,但它代表的是所有类型的集合,而非一个 空集
  • 类型约束中指定 空接口 的意思是指定了一个包含所有类型的类型集,并不是类型约束限定了只能使用 空接口 来做类型形参
  • any 就是 interaface{} 的别名(alias),两者 完全等价
  • Go内置了一个叫 comparable 的接口,它代表了 所有可用 != 以及 == 对比的类型
  • Go1.18开始将接口分为了两种类型
    • 基本接口(Basic interface)
      • 接口定义中如果只有方法
      • 定义接口变量并赋值
      • 也代表了一个类型集,所以也可用在类型约束中
    • 一般接口(General interface)
      • 接口内不光只有方法,还有类型
      • 一般接口类型不能用来定义变量,只能用于泛型的类型约束
    • 接口定义中使用类型形参则为是泛型类型,使用 泛型类型也必须传入类型实参实例化
    • 接口定义的种种限制规则
      • 用 | 连接多个类型的时候,类型之间不能有相交的部分(即必须是不交集)
        • 但是相交的类型中是接口的话,则不受这一限制
      • 类型的并集中不能有类型形参
      • 接口不能直接或间接地并入自己
      • 接口的并集成员个数 大于一 的时候不能直接或间接 并入 comparable 接口
      • 带方法的接口 (无论是基本接口还是一般接口),都 不能写入 接口的并集中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值