golang append()已求值但未使用

vmpqdwk3  于 2022-12-28  发布在  Go
关注(0)|答案(5)|浏览(164)
func main(){
     var array [10]int
     sliceA := array[0:5]
     append(sliceA, 4)
     fmt.Println(sliceA)
}

错误:已计算但未使用append(sliceA,4)
我不知道为什么?切片追加操作没有运行...

toiithl6

toiithl61#

请参阅:附加和复制切片
在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]
z6psavjg

z6psavjg2#

sliceA = append(sliceA, 4)

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

wqsoz72f

wqsoz72f3#

你可以试试这个:

sliceA = append(sliceA, 4)

内置函数append([]type, ...type)返回一个类型为的数组/切片,该类型应该被赋给您想要的值,而输入数组/切片只是一个源。

2skhul33

2skhul334#

根据Go文档:
append的结果值是一个切片,其中包含原始切片的所有元素以及提供的值。
因此,“append”的返回值将包含原始切片和附加部分。

kyxcudwk

kyxcudwk5#

要理解的关键是slice只是一个底层数组的"视图"。你把这个视图传递给append函数by value,底层数组被修改,最后append函数的返回值给你底层数组的不同视图。也就是说,slice有更多的元素

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

相关问题