【发布时间】:2023-01-11 03:10:44
【问题描述】:
我是个新手,但最初我想弄清楚如何删除函数中切片中的最后一个元素。 我注意到在下面的代码中,函数 doThing 修改了 'thing' 切片,即使它没有作为指针传递。
package main
import (
"fmt"
)
func doThing(arr []int) {
arr = arr[:len(arr)-1]
arr = append(arr, 1000)
}
func main() {
thing := []int{1, 2, 3, 4, 5}
doThing(thing)
fmt.Printf("thing: %v\n", thing)
}
输出:thing: [1 2 3 4 1000]
预期:thing: [1 2 3 4 5]
如果我删除arr = arr[:len(arr)-1] 行,则不会修改“thing”切片。如果删除 arr = append(arr, 1000),也会发生相同的行为。
我的想法是,由于“thing”的长度在函数内没有变化,因此 arr 不会重新分配为新数组。
谁能解释为什么会这样?
【问题讨论】: