Go筆記-指針
阿新 • • 發佈:2017-11-20
獨立 減少 運算 ++ rect 沒有 地址 指針 blob Go 語言的取地址符是 &,放到一個變量前使用就會返回相應變量的內存地址
一個指針變量可以指向任何一個值的內存地址 它指向那個值的內存地址,在 32 位機器上占用 4 個字節,在 64 位機器上占用 8 個字節,並且與它所指向的值的大小無關。當然,可以聲明指針指向任何類型的值來表明它的原始性或結構性;你可以在指針類型前面加上 * 號(前綴)來獲取指針所指向的內容,這裏的 * 號是一個類型更改器。使用一個指針引用一個值被稱為間接引用。
當一個指針被定義後沒有分配到任何變量時,它的值為 nil。
對於任何一個變量 var, 如下表達式都是正確的:var == *(&var)
註意:
不能得到一個文字或常量的地址,例如:
const i = 5
ptr := &i // 錯誤
ptr2 := $10 // 錯誤
指針運算在Go中不合法
c = *p++
對空指針的反向引用是非法的,例如:
var ptr *int
a := *ptr
適度使用指針的優點:
指針的一個高級應用是你可以傳遞一個變量的引用(如函數的參數),這樣不會傳遞變量的拷貝。指針傳遞是很廉價的,只占用 4 個或 8 個字節。當程序在工作中需要占用大量的內存,或很多變量,或者兩者都有,使用指針會減少內存占用和提高效率。被指 向的變量也保存在內存中,直到沒有任何指針指向它們,所以從它們被創建開始就具有相互獨立的生命周期。
過度使用指針的缺陷:
另一方面(雖然不太可能),由於一個指針導致的間接引用(一個進程執行了另一個地址),指針的過度頻繁使用也會導致性能下降。
指針也可以指向另一個指針,並且可以進行任意深度的嵌套,導致你可以有多級的間接引用,但在大多數情況這會使你的代碼結構不清晰。
學習參考處:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md
Go筆記-指針