Go中以下的值是可寻址的,因此可以被取地址:
- 变量
- 可寻址的结构体的字段
- 可寻址的数组的元素
- 任意切片的元素(无论是可寻址切片或不可寻址切片)
- 指针解引用操作
示例:
Go中以下的值是不可寻址的:
- 字符串的字节元素
- 映射元素
- 接口值的动态值(类型断言的结果)
- 常量值
- 字面值
- 声明的包级别函数
- 方法(用做函数值)
- 表达式中间结果值
- 数据通道接收操作
- 子字符串操作
- 子切片操作
- 加法、减法、乘法、以及除法等等。
- 函数调用
- 显式值转换
- 各种操作,不包含指针解引用(dereference)操作,但是包含数据通道接收操作、子字符串操作、子切片操作,以及加法/减法/乘法/除法等等。
虽然字面值是不可寻址的,但是组合字面值T{}可以被取地址(虽然它是不可寻址的),这只是为了编程方便而设计的一个语法糖,并非为以上规则的特例。比如下面这段代码编译时没问题的。
关于更多Go语言编程中的事实、细节和技巧,请访问《Go语言101》官方网站:https://gfw.go101.org 。
作者:老貘