package mainimport "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}上面代碼的結果如下:[你好火星][你好火星火星]如您所見,第二個fmt.Println(paths)顯然使用修改后的切片但不使用重新分配的值。這是為什么?我期待它[hello mars]像之前的印刷品一樣印刷。我知道被傳遞的與函數中的參數期望引用相同的底層數組的paths切片不同。但我仍然不明白我是如何改變傳遞給function的底層數組而不是.pathsdelete()pathsdelete[hello mars mars][hello world mars]
1 回答

婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
因為,正如您所說,正在使用相同的底層數組。當你進行追加時,paths[:1]
是一個長度為 1 且容量為 3 的切片,并且paths[2:]
是一個長度為 1 的切片,因此第一個切片的底層數組中有足夠的空間來追加新值而無需分配新數組。paths
inmain
仍然是長度為 3 的切片,因為它從未被修改過,但是由于底層數組被修改了(特別是元素 1),您會看到您看到的值。
- 1 回答
- 0 關注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消