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

2019-10-21     Go语言中文网

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

  • 变量
  • 可寻址的结构体的字段
  • 可寻址的数组的元素
  • 任意切片的元素(无论是可寻址切片或不可寻址切片)
  • 指针解引用操作

示例:

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

  • 字符串的字节元素
  • 映射元素
  • 接口值的动态值(类型断言的结果)
  • 常量值
  • 字面值
  • 声明的包级别函数
  • 方法(用做函数值)
  • 表达式中间结果值
  • 数据通道接收操作
  • 子字符串操作
  • 子切片操作
  • 加法、减法、乘法、以及除法等等。
  • 函数调用
  • 显式值转换
  • 各种操作,不包含指针解引用(dereference)操作,但是包含数据通道接收操作、子字符串操作、子切片操作,以及加法/减法/乘法/除法等等。

虽然字面值是不可寻址的,但是组合字面值T{}可以被取地址(虽然它是不可寻址的),这只是为了编程方便而设计的一个语法糖,并非为以上规则的特例。比如下面这段代码编译时没问题的。


关于更多Go语言编程中的事实、细节和技巧,请访问《Go语言101》官方网站:https://gfw.go101.org 。

作者:老貘

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