【发布时间】:2019-10-23 05:50:00
【问题描述】:
我有一个切片,如果我直接在主函数中从中删除一个元素,切片的长度将减一。但是在另一个函数中删除并在main中调用它,切片的长度仍然保持原点。谁能给我解释一下?谢谢!
package main
import "fmt"
func main() {
a := []int{1, 2, 3, 4}
i := 0
//copy(a[i:], a[i+1:])
//a[len(a)-1] = 0
//a = a[:len(a)-1]
//fmt.Println(a) //outputs: [2 3 4], this is correct
f(a, i)
fmt.Println(a) //outputs: [2 3 4 0], this is wrong!
}
func f(a []int, i int) {
copy(a[i:], a[i+1:])
a[len(a)-1] = 0
a = a[:len(a)-1]
fmt.Println(a) //outputs: [2 3 4], here still correct
}
【问题讨论】:
-
你的函数应该返回一个新切片
标签: go