Go1.21.0是2023年8月8日发布的Go语言的最新版本,它带来了一些语言和工具的变化。
- **min和max内置函数**:Go1.21.0增加了两个新的内置函数min和max,用来对任意可比较的有序类型进行最小值或最大值的操作。min和max函数可以接受一个或多个参数,并返回其中的最小值或最大值。如果参数是浮点数并且包含NaN,min和max函数会返回NaN。
- **clear预定义函数**:Go1.21.0增加了一个clear预定义函数用来做切片和map的clear操作。对于切片,clear函数会将所有元素设置为零值,但保持切片的长度和容量不变。对于map,clear函数会删除所有键值对,得到一个空map。clear函数的使用示例在[这里]展示。
- **改变panic(nil)语义**:Go1.21.0改变了panic(nil)的语义,使得recover函数在捕获到panic(nil)时不再返回nil,而是返回一个特定的错误类型PanicNilError。这样可以避免开发者误以为没有发生panic,而继续执行正常逻辑。
- **新增标准库:slices、maps、slog 等 **:这几个库正式进入标准库了。
还有更多其他特性或变化,可以通过官方文档了解:<https://go.dev/doc/go1.21>。
可以官方方式试用,也可以在 Go语言中文网下载最新版:<https://studygolang.com/dl>。
比较坑的是 `context`.
```go
func main() {
ctx, cancel := context.WithCancel(context.Background())
newCtx := context.WithoutCancel(ctx)
cancel()
<-ctx.Done() // ok, ctx has cancled.
<-newCtx.Done() // error: dead lock!
}
```
从ctx复制了一份newCtx , 还去掉了`cancel`, 然后newctx就不会关联ctx的`cancel`了
#1
更多评论