func main(){
var array [10]int
sliceA := array[0:5]
append(sliceA, 4)
fmt.Println(sliceA)
}
错误:附加(sliceA,4)已评估但未使用
我不知道为什么?切片附加操作未运行...
答案 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)