1. 程式人生 > >golang傳值和傳引用

golang傳值和傳引用

1.定義:

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一樣,傳參的方式是傳值,都可以直接使用,其內部維護著指向真正儲存空間的指標。