背景

contraints
constraintsSignedUnsignedIntegerFloatComplexOrderedtype 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
Tcontraints.Ordered
type Ordered interface {
    Integer | Float | ~string
}

下面代码的执行后果为:

int 1
float64 1
string a
constraints

现状

constraintsx/exp
func(context.Context)func(othercontext.Context)

该提议也同Go语言发明者Rob Pike, Robert Griesemer和Ian Lance Taylor做过探讨,失去了他们的批准。

其中Robert Griesemer和Ian Lance Taylor是Go泛型的设计者。

Russ Cox将这个提议在GitHub颁布后,社区成员没有拥护意见,因而在2022.02.03这个提议失去正式通过。

constraints

备注:

golang.org/xgolang.org/xgo getgolang.org/x/exp

移除起因

constraints
constraints
constraintsanycomparableconstaintsconstraints.OrderedOrderedanycomparableconstraints

总结

constraints

我写了2篇Go泛型入门的教程,欢送大家参考

  • 官网教程:Go泛型入门
  • 一文读懂Go泛型设计和应用场景

好文举荐

  • Go Quiz: Google工程师的Go语言面试题
  • Go Quiz: 从Go面试题看slice的底层原理和注意事项
  • Go Quiz: 从Go面试题搞懂slice range遍历的坑
  • Go Quiz: 从Go面试题看channel的注意事项
  • Go Quiz: 从Go面试题看channel在select场景下的注意事项
  • Go Quiz: 从Go面试题看defer语义的底层原理和注意事项
  • Go Quiz: 从Go面试题看defer的注意事项第2篇
  • Go Quiz: 从Go面试题看defer的注意事项第3篇
  • Go Quiz: 从Go面试题看分号规定和switch的注意事项

开源地址

文章和示例代码开源在GitHub: Go语言高级、中级和高级教程。

公众号:coding进阶。关注公众号能够获取最新Go面试题和技术栈。

集体网站:Jincheng’s Blog。

知乎:无忌。

References

  • https://github.com/golang/go/…
  • https://github.com/golang/go/…
  • https://pkg.go.dev/golang.org/x