插入缺少的值不工作GoLang
我试图插入一个Int值来切片,如果它在切片中丢失 我的代码:插入缺少的值不工作GoLang,go,slice,Go,Slice,我试图插入一个Int值来切片,如果它在切片中丢失 我的代码: package main import ( "fmt" ) func AppendIfMissing(slice []int, i int) []int { for _, ele := range slice { if ele == i { fmt.Println(i) return slice } } fmt.Prin
package main
import (
"fmt"
)
func AppendIfMissing(slice []int, i int) []int {
for _, ele := range slice {
if ele == i {
fmt.Println(i)
return slice
}
}
fmt.Println("i value is ", i)
slice = append(slice, i)
return slice
}
func main() {
slice1 := []int{1, 2, 3, 4}
AppendIfMissing(slice1, 60)
fmt.Println("slice after adding :", slice1)
}
输出:
i value is 60
slice after adding : [1 2 3 4]
没有追加到切片。我的代码有什么问题?
AppendIfMissing
返回需要影响变量的切片。append(slice,i)
创建一个新的slice,这意味着参数slice没有被修改,它指的是一个全新的slice:
- 在最后返回
- 这需要影响到一个变量
slice1 = AppendIfMissing(slice1, 60)
我同意文章“”提到 即使切片标头是按值传递的,标头也包含指向数组元素的指针,因此传递给函数的原始切片标头和标头副本都描述了同一数组。
因此,当函数返回时,可以通过原始slice变量查看修改后的元素 但是那篇文章中的函数没有使用
append
:
func AddOneToEachElement(slice []byte) {
for i := range slice {
slice[i]++
}
}
函数可以修改切片参数的内容,但不能修改其标头
通过这样做
slice = append(slice, i)
修改标头后,将生成的切片重新分配到完全不同的数组。这在函数外部是看不见的。感谢您的新见解!!