注意:

  1. 在反射这一块的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