注意:
- 在反射这一块的type指的是对象的类型对象,并不类型本身;同理value对象也是对象的值对象。
2. goland的debug不支持传参自动转型,但是goloang支持。这会造成一个诡异的现象
3. .Type().Name()得到的是它本身的类型,.Kind().string()得到的是它底层类型;有时候这两个结果是一样的。
How to get
1. 获得 直接赋值字面量的 param的 类型
a. 获得param的底层类型
value路线:reflect.ValueOf(myInt).Type().Kind().Name()
type路线:reflect.TypeOf(param).Kind().Name()
b. 获得param的自身类型
value路线:reflect.ValueOf(myInt).Type().Name()
type路线:reflect.TypeOf(myInt).Name()
其中把 .Name() 换成 .String()也可以,官方注释应该是写错了,实测后的结论是
.String() 会得到包名.类型名 是unique的;.Name() 只会得到类型名;如果要做比较判断推荐直接用前面一截拿到type对象来判断。
2. 获得 直接赋值字面量的 param的 值
a. 获得param的值
value路线:reflect.ValueOf(myInt).Interface()
type路线:不知道
注意最后会得到 interface{}类型
3. 获得套娃赋值的param 自身的类型和底层的类型
4. 获得套娃赋值的param 下一层的类型 就是上一个例子的 []int
不知道,欢迎补充
5. 遍历获得切片内元素的值和类型
6. 遍历获得map内key|value的值和类型
7. 获得直接赋值的指针的值和类型
note: 2022/2/7 我被炒了,继续完成这个攻略...
8. 获得直接赋值的interface的值和类型
9. 遍历获得struct的属性名称,tag,注释
note: 2022/2/7刚得知我爸快死了,明天上班摸鱼的时候再写吧...
How to set
How to create
How to append