当我们需要将切片转换为固定大小的数组时,不能直接赋值,例如:
a := []int{0, 1, 2, 3, 4, 5}
var b [3]int = a[0:3]
// 在变量声明中不能将 a[0:3](类型为 []int 的值)赋值给 [3]int 类型的变量
// (不兼容的赋值)
为了将切片转换为数组,Go 团队在 Go 1.17 中更新了这个特性。随着 Go 1.20 的发布,借助更方便的字面量,转换过程变得更加简单:
//以下为 Go 1.20
func Test(t *testing.T) {
a := []int{0, 1, 2, 3, 4, 5}
b := [3]int(a[0:3])
fmt.Println(b) // [0 1 2]
}
// 以下为Go 1.17
func TestM2e(t *testing.T) {
a := []int{0, 1, 2, 3, 4, 5}
b := *(*[3]int)(a[0:3])
fmt.Println(b) // [0 1 2]
}
只是一个快速提醒:你可以使用 a[:3] 替代 a[0:3]
。我提到这一点是为了更清晰地说明。