『就要學習 go 語言』系列 -- 第 31 篇分享好文需要明確的是,go 沒有引用變數,所以 go 語言裡呼叫函式的時也沒有引用傳遞。
在一些開發語言中(比如 c++),對已存在的變數可以宣告別名,這種別名稱為引用變數。
1#include
23int main()
可以看到 a、b 和 c 都指向相同的記憶體位置。對 a 的寫操作會影響 b 和 c。當你想在不同的範圍內宣告引用變數時,這是很有用的——即函式呼叫時。
與 c++ 不同,go 程式中定義的每個變數都占用乙個惟一的記憶體位置。
1package main
23import "fmt"
45func main()
建立兩個共享同一記憶體位置的變數是不可能的。可以建立兩個指向同一記憶體位置的變數,不過這與兩個變數共享同一記憶體位置是不同的。
1package main
23import "fmt"
45func main()
上面這段**,b 和 c 都具有相同的值 -- 即變數 a 的位址,但 a、c 儲存在記憶體中不同的位置。改變 b 的內容不會影響到 c。
錯!map 和 channel 不是引用,如果是的話下面這段**會輸出 false。
1package main
23import "fmt"
45func fn(m map[int]int)
89func main()
如果map m 是 c++ 風格的引用變數,則在 main() 宣告的 m 和 在 fn() 宣告的 m 會共享相同的記憶體空間。但是,因為對 fn() 中 m 賦值不影響 main() 的 m,所以我們可以看出 map 不是引用變數。
go 沒有引用傳遞,因為 go 沒有引用變數。
推薦閱讀:
指標與引用
800 字徹底理解 go 指標
指標(譯)
如果我的文章對你有所幫助,點讚、**都是一種支援!
給個[在看],是對四哥最大的支援
Go語言引用型別
切片 1 切片定義 a 宣告乙個切片var slice int var slice int var slice int int b 通過make來建立切片var slice make int,10 c 通過 語法來定義切片slice int slice make int,10 slice make ...
Go語言 陣列
定義陣列的長度和型別,預設使用型別的零值進行初始化 var a1 10 int 不指定陣列的長度,指定型別,缺省會使用初始值設定陣列的長度 初始值有幾個,陣列長度就是幾 var a2 int 指定陣列的長度和型別,同時初始化全部或者部分的數字,元素會從前到後順序初始化 初始化時物件的數量不能大於陣列...
GO語言 陣列
陣列是同一種資料型別元素的集合。在go語言中,陣列從宣告時就確定,使用時可以修改陣列成員,但是陣列大小不可變化。基本語法 定義乙個長度為3元素型別為int的陣列a var a 3 intvar 陣列變數名 元素數量 t比如 var a 5 int,陣列的長度必須是常量,並且長度是陣列型別的一部分。一...