Go中哪些值可以被取地址,哪些值不可以被取地址?

2019-10-21     Go語言中文網

Go中以下的值是可尋址的,因此可以被取地址:

  • 變量
  • 可尋址的結構體的欄位
  • 可尋址的數組的元素
  • 任意切片的元素(無論是可尋址切片或不可尋址切片)
  • 指針解引用操作

示例:

Go中以下的值是不可尋址的:

  • 字符串的位元組元素
  • 映射元素
  • 接口值的動態值(類型斷言的結果)
  • 常量值
  • 字面值
  • 聲明的包級別函數
  • 方法(用做函數值)
  • 表達式中間結果值
  • 數據通道接收操作
  • 子字符串操作
  • 子切片操作
  • 加法、減法、乘法、以及除法等等。
  • 函數調用
  • 顯式值轉換
  • 各種操作,不包含指針解引用(dereference)操作,但是包含數據通道接收操作、子字符串操作、子切片操作,以及加法/減法/乘法/除法等等。

雖然字面值是不可尋址的,但是組合字面值T{}可以被取地址(雖然它是不可尋址的),這只是為了編程方便而設計的一個語法糖,並非為以上規則的特例。比如下面這段代碼編譯時沒問題的。


關於更多Go語言編程中的事實、細節和技巧,請訪問《Go語言101》官方網站:https://gfw.go101.org 。

作者:老貘

文章來源: https://twgreatdaily.com/zh/rs4e720BMH2_cNUg5C-T.html