Go中以下的值是可尋址的,因此可以被取地址:
- 變量
- 可尋址的結構體的欄位
- 可尋址的數組的元素
- 任意切片的元素(無論是可尋址切片或不可尋址切片)
- 指針解引用操作
示例:
Go中以下的值是不可尋址的:
- 字符串的位元組元素
- 映射元素
- 接口值的動態值(類型斷言的結果)
- 常量值
- 字面值
- 聲明的包級別函數
- 方法(用做函數值)
- 表達式中間結果值
- 數據通道接收操作
- 子字符串操作
- 子切片操作
- 加法、減法、乘法、以及除法等等。
- 函數調用
- 顯式值轉換
- 各種操作,不包含指針解引用(dereference)操作,但是包含數據通道接收操作、子字符串操作、子切片操作,以及加法/減法/乘法/除法等等。
雖然字面值是不可尋址的,但是組合字面值T{}可以被取地址(雖然它是不可尋址的),這只是為了編程方便而設計的一個語法糖,並非為以上規則的特例。比如下面這段代碼編譯時沒問題的。
關於更多Go語言編程中的事實、細節和技巧,請訪問《Go語言101》官方網站:https://gfw.go101.org 。
作者:老貘