go 中可通过切片语法 `array[:]` 将固定长度数组(如 `[32]byte`)安全、高效地转换为对应类型的切片(如 `[]byte`),该操作不复制底层数据,仅创建指向同一底层数组的新切片头。
在 Go 语言中,数组和切片是两种不同的类型:数组 [N]T 是值类型,具有固定长度和内存布局;而切片 []T 是引用类型,由指针、长度和容量三部分组成,底层仍指向一段连续内存。虽然二者类型不兼容,但 Go 允许通过切片表达式(slice expression)对数组进行“视图化”转换——即用 arr[:] 获取覆盖整个数组的切片。
例如,当函数 Foo() 返回 [32]byte,而下游函数 Bar() 接收 []byte 时,只需使用 x[:] 即可完成零拷贝转换:
func Foo() [32]byte {
return [32]byte{'h', 'e', 'l', 'l', 'o', ...} // 实际32字节
}
func Bar(b []byte) {
fmt.Printf("Length: %d, Capacity: %d, Data: %s\n", len(b), cap(b), string(b))
}
func main() {
x := Foo()
Bar(x[:]) // ✅ 正确:生成 []byte 指向 x 的底层数组
}⚠️ 注意事项:

总结:array[:] 是 Go 中数组到切片转换的标准、安全且零成本的方式,是理解 Go 内存模型与类型系统的关键实践之一。