golang傳值和傳引用
阿新 • • 發佈:2019-01-10
1.定義:
基本型別:byte,int,bool,string
複合型別:陣列,陣列切片,結構體,map,channnel
3.陣列:
[0 1 2] [0 1 5]
[0 1 5] [0 1 5]
4.陣列切片看這篇博文:
b = a;
b.modify();
如果b的修改不會改變a的值,那麼是傳值;否則,是傳引用
2.golang中大多數是傳值的,有:基本型別:byte,int,bool,string
複合型別:陣列,陣列切片,結構體,map,channnel
3.陣列:
3.1 傳值
func main() {
var array = [3]int{0, 1, 2}
var array2 = array
slice2[2] = 5
fmt.Println(array, array2)
}
輸出結果:[0 1 2] [0 1 5]
3.2.傳引用的使用方法:
輸出結果:func main() { var array = [3]int{0, 1, 2} var array2 = &array array2[2] = 5 fmt.Println(array, *array2) }
[0 1 5] [0 1 5]
4.陣列切片看這篇博文:
5.struct結構體:
在函式中引數的傳遞可以是傳值(物件的複製,需要開闢新的空間來儲存該新物件)和傳引用(指標的複製,和原來的指標指向同一個物件),建議使用指標,原因有兩個:能夠改變引數的值,避免大物件的複製操作節省記憶體。struct和陣列的用法類似
6.map看這篇博文:
7.channel:
channel和陣列切片,map一樣,傳參的方式是傳值,都可以直接使用,其內部維護著指向真正儲存空間的指標。