切片转换为数组
以下代码预期把切片转换为数组:
1
2
3
4
5
6
7
8
9
10
11
12
13
| package main
import (
"fmt"
"reflect"
)
func main() {
slice := []int{1, 2, 3, 4}
array := [4]int(slice)
fmt.Println(reflect.TypeOf(slice))
fmt.Println(reflect.TypeOf(array))
}
|
在 Go 1.20 之前的版本,会导致以下错误:
1
2
| # command-line-arguments
./main.go:10:17: cannot convert slice (type []int) to type [4]int
|
在升级到 Go 1.20 后,可以正常运行。
新增 unsafe 包函数
分别是:SliceData、String 和 StringData。
改进结构体和数组是否相等的规范
现在按照结构体字段声明的顺序依次比较,并在第一个不相等字段处停止,并报告整个结构体都不相等。
数组类似,从第一个元素开始依次比较。
comparable 优化
以下代码使用空 interface 作为类型参数传入:
1
2
3
4
5
6
7
8
| package main
func main() {
InterfaceComparable[interface{}]()
}
func InterfaceComparable[T comparable]() {
}
|
在 Go 1.20 之前的版本,会导致以下错误:
1
2
| # command-line-arguments
./main.go:4:22: interface{} does not implement comparable
|
在升级到 Go 1.20 后,可以正常运行。
这是因为可比较类型,如:interface,现在都符合 comparable 约束。
参考链接
Go 1.20 Release Notes
All your comparable types