Go 重新指定切片参数的行为不同

Go 重新指定切片参数的行为不同,go,Go,上述代码的结果如下所示: [你好,火星] [你好,火星] 如您所见,第二个fmt.Println(path)显然使用了修改后的切片,但没有使用重新分配的值。为什么呢?我希望它能像以前一样打印出[hello mars] 我知道传递的paths与delete()函数中的paths参数(除了引用相同的底层数组)不是同一个片。但是我仍然不明白我是如何将路径的底层数组更改为delete函数的,因为它打印[hello mars]而不是[hello world mars],因为正如您所说,使用的是相同的底层数

上述代码的结果如下所示:

[你好,火星]

[你好,火星]

如您所见,第二个
fmt.Println(path)
显然使用了修改后的切片,但没有使用重新分配的值。为什么呢?我希望它能像以前一样打印出
[hello mars]


我知道传递的
paths
delete()
函数中的
paths
参数(除了引用相同的底层数组)不是同一个片。但是我仍然不明白我是如何将
路径的底层数组更改为
delete
函数的,因为它打印
[hello mars]
而不是
[hello world mars]

,因为正如您所说,使用的是相同的底层数组。执行追加时,
paths[:1]
是长度为1、容量为3的片,
paths[2://code>是长度为1的片,因此第一片的基础数组中有足够的空间来追加新值,而无需分配新数组<
main
中的code>paths
仍然是一个长度为3的片段,因为它从未被修改过,但是由于基础数组(特别是元素1)被修改过,您可以看到您看到的值

如果还没有,你可能想看看

package main

import "fmt"

func main() {
    paths := []string{"hello", "world", "mars"}
    var result = delete(paths, 1)
    fmt.Println(result)
    fmt.Println(paths)
}

func delete(paths []string, index int) []string {
    paths = append(paths[:index], paths[index+1:]...)
    return paths
}