go 類型的值語義和引用語義

Go語言重大部分類型都是基於值語義,包括:

1.基本類型:byte,int,bool,float32,float64,string等;

2.複合類型:數組array,結構體struct,指針pointer等;

 

重點來了,C/C++中,數組傳遞是引用語義,但在Go中,數組和基本類型沒啥區別,都是值語義,也就是說,Go中的數組傳遞是完全值傳遞

不理解?看例子!

//C或C++中

int aData[3] = {1,2,3};
auto p = aData;  //實際上這裏相當於 int* p = aData
p[1]++;    //最終導致 aData = {1, 3, 3}



//Go中

var a = [3]int{1,2,3}
var b = a
b[1]++    // 最終a={1,2,3}並沒有被改變

那麼如何能引用傳遞呢?很簡單,用指針形式,看例子!

//這裏演示數組的引用傳遞

var a=[3]int{1,2,3}
var b = &a   // 與上一個例子對比,差別在這裏對 a 取地址,相當於 b 類型爲 *[3]int
b[1]++    //最終會改變a={1,3,3}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章