func main(){
var array [10]int
sliceA := array[0:5]
append(sliceA, 4)
fmt.Println(sliceA)
}
错误:append(sliceA, 4)已评估但未使用
不知道为什么?切片追加操作未运行...
参考:追加和复制切片
在 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]
sliceA = append(sliceA, 4)
append()
返回包含一个或多个新值的切片。你可以试试这个:
sliceA = append(sliceA, 4)
内置函数
append([]type, ...type)
返回一个类型的数组/切片,应将其分配给您想要的值,而输入数组/切片只是一个源。简单来说,outputSlice = append(sourceSlice, appendedValue)
根据 Go 文档:
append 的结果值是一个切片,其中包含原始切片的所有元素加上提供的值。
因此“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)