1. 理解Go语言中interface的内部表示和nil值的含义 在Go语言中,interface 类型是一个指向底层数据结构(类型信息和值信息)的指针。当一个 interface 变量被声明但没有被赋予任何值时,它的指针值为 nil,即它没有指向任何有效的底层数据结构。因此,判断一个 interface 是否为 nil,实际上就是判断它的指针值是否为 ...
一般情况下,通过使用w==nil或者w!=nil来判读接口值是否为空,只是判断了动态类型,而没有判断动态值。 例如,下面的例子。 packagemainimport("fmt")funcmain(){varainterface{} =nil// tab = nil, data = nilvarbinterface{} = (*int)(nil)// tab 包含 *int 类型信息, data = nilfmt.Println(a==nil...
Golang的interface 要值和类型都为nil 才等于 nil,所以判断返回值的时候要小心
var in interface{} fmt.Println(data, data == nil) // nil,true, 可以正确判断 fmt.Println(in, in == nil) // nil,true, 可以正确判断 in = data fmt.Println(in, in == nil) // nil,false, 无法正确判断 fmt.Println(in, reflect.ValueOf(in).IsNil()) // nil,true, 通过此方法可以正...
}else{return"not string",nil} }//反射funcinterfaceAssert2(unknowinterface{})(retType reflect.Type, val reflect.Value){ retType = reflect.TypeOf(unknow) val = reflect.ValueOf(unknow)returnretType,val }//type关键字funcinterfaceAssert3(unknowinterface{})(retTypestring){switchunknow.(type){casestri...
如果两个interface 有相同的动态类型和相同的动态值,而且不为nil,那么这两个interface就是相同的2、非interface类型X 和 intreface类型T,如果X实现了T, 那么x和t(x t 分代表X和T的值)就是可比较的。如果他们的值是相同的,那么他们就是equal3、如果struct的所有field都是可比较的,那他们的值就是可比较的。