我正在测试一些go数组初始化和一般用法,但我无法弄清楚为什么不能扩展一个用定义长度初始化的数组?
package main
func main() {
arr0 := []int{1, 2, 3} //
add(arr0...) // OK
arr1 := [3]int{1, 2, 3} //
slice := arr1[:] //
add(slice...) // OK
arr2 := [3]int{} //
arr2[0] = 1 //
arr2[1] = 2 //
arr2[3] = 3 //
add(arr2...) // cannot use arr2 (type [3]int) as type
// []int in argument to add
}
func add(terms ...int) (sum int) {
for _, term := range terms {
sum += term
}
return
}
答案 0 :(得分:1)
正如其他人所说:
[n]type
- 数组(固定大小)
[]type
- 切片
针对您的案例的快速解决方案是从array
到slice
的简单转换。
add(arr2[:]...)
这只会使它成为指向arr2
(不是副本)
答案 1 :(得分:0)
使用运算符...
作为尾部,例如T...
。 T
应始终切片。