先看代码:
什么是可设置( CanSet )
首先需要先明确下,可设置是针对 reflect.Value 的。普通的变量要转变成为 reflect.Value 需要先使用 reflect.ValueOf () 来进行转化。
元素本身是不能设置,
元素的指针是肯定不能设置的,因为它是指针。
元素的指针指向的元素是空的时候也不能设置
元素的指针指向的元素(Elem)是可以设置的
什么是可地址( CanAddr )
在 reflect 包里面可以看到,除了 CanSet 之外,还有一个 CanAddr 方法。它们两个有什么区别呢?
CanAddr 方法和 CanSet 方法不一样的地方在于:对于一些结构体内的私有字段,我们可以获取它的地址,但是不能设置它。
CanAddr 方法和 CanSet 方法不一样的地方在于:对于一些结构体内的私有字段,我们可以获取它的地址,但是不能设置它。
所以,CanAddr 是 CanSet 的必要不充分条件:一个 Value 如果 CanAddr, 不一定 CanSet。但是一个变量如果 CanSet,它一定 CanAddr。