先看代码:

 

 

 

什么是可设置( CanSet )

首先需要先明确下,可设置是针对 reflect.Value 的。普通的变量要转变成为 reflect.Value 需要先使用 reflect.ValueOf () 来进行转化。

元素本身是不能设置,

元素的指针是肯定不能设置的,因为它是指针。

元素的指针指向的元素是空的时候也不能设置

元素的指针指向的元素(Elem)是可以设置的

 

什么是可地址( CanAddr )

 

在 reflect 包里面可以看到,除了 CanSet 之外,还有一个 CanAddr 方法。它们两个有什么区别呢?

CanAddr 方法和 CanSet 方法不一样的地方在于:对于一些结构体内的私有字段,我们可以获取它的地址,但是不能设置它。

 

 

CanAddr 方法和 CanSet 方法不一样的地方在于:对于一些结构体内的私有字段,我们可以获取它的地址,但是不能设置它。
所以,CanAddr 是 CanSet 的必要不充分条件:一个 Value 如果 CanAddr, 不一定 CanSet。但是一个变量如果 CanSet,它一定 CanAddr。