golang反射基本操作

一、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 

从函数句柄可知&#

你可能感兴趣的:(golang,开发语言,后端)