2013-06-30 43 views
1

您可以在Go Playground上使用run the example code爲什麼append()修改提供的slice? (見示例)

下面是代碼:

package main 

import "fmt" 

func main() { 
    numbers := []int{1, 2, 3, 4, 5} 

    fmt.Println(numbers) 
    _ = append(numbers[0:1], numbers[2:]...) 
    fmt.Println(numbers) 
} 

輸出:

[1 2 3 4 5] 
[1 3 4 5 5] 

爲什麼在numbers片通過追加修改?這是預期的行爲,如果是的話,你能向我解釋爲什麼?我認爲append不會修改它的參數。

+1

您是否閱讀過[documentation](http://golang.org/ref/spec#Appending_and_copying_slices)?我認爲這很好地解釋了這種行爲。 – fuz

回答

9

請參閱http://blog.golang.org/go-slices-usage-and-internals

追加功能可能如果您追加到切片的內容不符合當前切片的容量,則分配新的基礎陣列。追加確實修改了底層數組。您必須重新分配變量的原因是,正如我在第一句中所述,可能會重新分配基礎數組,並且舊切片仍將指向舊數組。

查看this play example查看我正在談論的內容。

相關問題