重大变化:Go 1.18将移除用于泛型的constraints包

Go 1.18 Beta 1引入的constraints包因存在命名争议及有限的实用性,官方提议并已确认将其移至x/exp。大多数泛型代码仅使用any和comparable,可能未来将这些作为预声明标识符。建议开发者避免在Go 1.18正式版中使用constraints包。
摘要由CSDN通过智能技术生成

Go 1.18将移除用于泛型的constraints包

背景

Go官方团队在Go 1.18 Beta 1版本的标准库里因为泛型设计而引入了contraints包。

 

constraints包里定义了SignedUnsigned, Integer, Float, ComplexOrdered共6个interface类型,可以用于泛型里的类型约束(type constraint)。

比如我们可以用constraints包写出如下泛型代码:

// test.go
package main
​
import (
  "constraints"
  "fmt"
)
​
// return the min value
func min[T constraints.Ordered](a, b T) T {
  fmt.Printf("%T ", a)
  if a < b {
    return a
  }
  return b
}
​
func main() {
  minInt := min(1, 2)
  fmt.Println(minInt)
​
  minFloat := min(1.0, 2.0)
  fmt.Println(minFloat)
​
  minStr := min("a", "b")
  fmt.Println(minStr)
}

函数min是一个泛型函数,接收2个参数,返回其中的较小者。

类型参数T的类型约束contraints.Ordered的定义如下:

type Ordered interface {
  Integer | Float | ~string
}

上面代码的执行结果为:

int 1
float64 1
string a

备注:如果对Go泛型和constraints包还不太了解的同学,可以翻看我之前写的一文读懂Go泛型设计和使用场景

现状

Go官方团队的技术负责人Russ Cox在2022.01.25提议constraints包从Go标准库里移除,放到x/exp项目下。Russ Cox给出的理由如下:

There are still questions about the the constraints package. To start with, although many people are happy with the name,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值