GO阵列扩展

时间:2016-10-15 00:12:05

标签: arrays go

我正在测试一些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
}

2 个答案:

答案 0 :(得分:1)

正如其他人所说:

[n]type - 数组(固定大小)

[]type - 切片

针对您的案例的快速解决方案是从arrayslice的简单转换。

add(arr2[:]...)

这只会使它成为指向arr2(不是副本)

存储的切片

答案 1 :(得分:0)

使用运算符...作为尾部,例如T...T应始终切片。