一、interface{}解析
golang中的interface类型,底层是有T和V两个变量实现的,T代表类型,V代表真正的值
用下面的例子来加深理解:
var x *string
var d interface{}
d = x
fmt.Println(d == x) //true
fmt.Println(x == nil) //true
fmt.Println(d == nil) //false
解析:d==x,由于和*string比较,直接比较值,都是nil,所以为true
x==nil,由于x未赋值也未初始化,所以是nil
d==nil,因为d是interface类型,判nil需要判断类型和值都是nil,但是此时的d已经有类型了,d对应的T就是*string,所以为false
二、reflect
通过反射获取类型和值
由第一节中对interface的描述,可以很好的理解,一个interface{}对应了值和类型
reflect.TypeOf
type any = interface{}
func TypeOf(i any) Type
从函数句柄可知,该函数获取了interface{}对应的Type(类型)
reflect.ValueOf
func ValueOf(i any) Value
从函数句柄可知&#