在大多数语言(如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