在大多數語言(如C++)中,傳遞數組會導致通過引用隱式傳遞數組,所以對函數中傳遞數組的任何更改都會導致更改原始數組。我正在學習Golang,並且在Alan A.A.的書「The Go Programming Language」中。 Donovan和Brian W. Kernighan據說,它的行爲與其他語言不同 - 它並不隱式地按引用傳遞數組。Golang將數組傳遞給函數並對其進行修改
它讓我感到困惑 - 這並不意味着傳遞沒有引用的數組不應該修改數組本身嗎?讓我來說明:
func main() {
tab := []int{1, 2, 3}
fmt.Println(tab)
// Results in [1 2 3]
reverse(tab)
fmt.Println(tab)
// Results in [3 2 1]
}
func reverse(tab []int) {
for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 {
tab[i], tab[j] = tab[j], tab[i]
}
}
在上面陣列碼沒有被引用過,但反向功能修改原來的,所以它的工作原理有點像C++程序將執行。任何人都可以解釋我的區別?
PS:對不起,如果它是一個虛擬的問題,我是完全新的Golang,並試圖很好地理解基礎知識。
你有沒有通過任何的文件不見了,像(https://golang.org/doc/effective_go.html#slices)的[在「有效進入」片段],在[「之旅(https://tour.golang.org/moretypes/7),[Slice規範](https://golang.org/ref/spec#Slice_types),甚至是[Go博客關於切片的帖子](https://blog.golang.org/go-slices-usage-and-internals)? – JimB