golang append()已评估但未使用

时间:2017-07-10 06:12:19

标签: arrays go var

func main(){
     var array [10]int
     sliceA := array[0:5]
     append(sliceA, 4)
     fmt.Println(sliceA)
}
  

错误:附加(sliceA,4)已评估但未使用

我不知道为什么?切片附加操作未运行...

5 个答案:

答案 0 :(得分:54)

参考:Appending to and copying slices

在Go中,参数按值传递。

典型的append用法是:

a = append(a, x)

你需要写:

func main(){
    var array [10]int
    sliceA := array[0:5]
    // append(sliceA, 4)  // discard
    sliceA = append(sliceA, 4)  // keep
    fmt.Println(sliceA)
}

输出

[0 0 0 0 0 4]

我希望它有所帮助。

答案 1 :(得分:3)

sliceA = append(sliceA,4) append返回包含一个或多个新值的切片。请注意,我们需要接受来自append的返回值,因为我们可能会得到一个新的切片值。

答案 2 :(得分:2)

你可以试试这个:

sliceA = append(sliceA, 4)

内置函数append([]type, ...type)返回一个类型的数组/切片,应该将其分配给您想要的值,而输入数组/切片只是一个源。简单地说,outputSlice = append(sourceSlice, appendedValue)

答案 3 :(得分:1)

Per the Go docs:

  

append的结果值是一个切片,其中包含原始切片的所有元素以及提供的值。

因此,' append'的返回值将包含带有附加部分的原始切片。

答案 4 :(得分:0)

要理解的关键是,切片只是基础数组的“视图”。 您将该视图按值传递给附加函数 ,底层数组被修改,最后,append函数的返回值为您提供底层数组的不同视图。即该切片中包含更多项

your code
sliceA := array[0:5]  // sliceA is pointing to [0,5)
append(sliceA, 4) // sliceA is still the original view [0,5) until you do the following

sliceA = append(sliceA, 4)

参考:https://blog.golang.org/slices