背景
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