golang append() 已评估但未使用

问题描述 投票:0回答:5
func main(){
     var array [10]int
     sliceA := array[0:5]
     append(sliceA, 4)
     fmt.Println(sliceA)
}

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

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

arrays go var
5个回答
141
投票

参考:追加和复制切片

在 Go 中,参数是按值传递的。

典型的

append
用法是:

a = append(a, x)

您需要写:

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

输出

[0 0 0 0 0 4]

16
投票
sliceA = append(sliceA, 4)

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


4
投票

你可以试试这个:

sliceA = append(sliceA, 4)

内置函数

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


2
投票

根据 Go 文档:

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

因此“append”的返回值将包含原始切片和附加部分。


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.