main 声明了一个带有名称的切片allOutputs(我相信它是一个字符串切片,而不是字符串数组),长度为零,容量为 100。然后它附加一个值为“abcd”的字符串并调用 myTest 函数,该函数将数组 [0] 更新为“1234”,然后附加一个值为“5678”。
allOutputs当我在通话后打印myTest时,我正确地看到第一个索引处的元素的更新值为“1234”。这告诉我 myTest 得到 slice 作为参考。但是调用者(这里主要)根本看不到后者append,为什么会这样?"5678"请记住,原始切片由容量为 100 的数组支持。当切片通过引用传递时,为什么我在 main 中看不到 5678?
换句话说,追加究竟是如何工作的?
import "fmt"
func myTest(array []string) {
array[0] = "1234"
array = append(array, "5678")
}
func main() {
allOutputs := make([]string, 0, 100)
allOutputs = append(allOutput, "abcd")
fmt.Println(allOutputs) // Println1
myTest(allOutputs)
fmt.Println(allOutputs) // Println2
}
实际输出:[1234]
我预计:[1234、5678]