map,slice,chan 是引用拷贝;
其余的,都是 值拷贝
值拷贝:
接收的是 整个array的值拷贝,所以方法对array中元素的重新赋值不起作用。
package main import "fmt" func modify(a [3]int) { a[0] = 4 fmt.Println("modify",a) // modify [4 2 3] } func main() { a := [3]int{1, 2, 3} modify(a) fmt.Println("main",a) // main [1 2 3] }
引用拷贝:
函数的引用拷贝与原始的引用指向同一个数组,所以对数组中元素的修改,是有效的
package main import "fmt" func modify(s []int) { s[0] = 4 fmt.Println("modify",s) // modify [4 2 3] } func main() { s := []int{1, 2, 3} modify(s) fmt.Println("main",s) // main [4 2 3] }
原文:https://www.cnblogs.com/yizhixiaowenzi/p/14664222.html