interface数据的表示
StringerBinary

 

b=Binary(200)

StringerBinary
Golang中的nil:

由定义可知:

var nil Type // Type must be a pointer, channel, func, interface, map, or slice type

nil is a predeclared identifier representing the zero value for a pointer, channel, func, interface, map, or slice type.

 

判断interface为nil:

只有当interface为零值,即<itable, data>=<nil, nil>时,才能等于nil。

在上面的例中,如有有这样一个方法:

  • isNil(nil)将会输出judge1  输入的nil将会被赋值成<nil, nil>的interface,可以用==nil来判断
  • var b *Binary; isNil(b)将会输出judge2 输入的b被赋值成<type=*Binary, value=nil>类型的interface(*Binary和Binary都能满足Stringer接口定义),不能==nil,而reflect.ValueOf(s)返回了具体类型的reflect.Value表示,此处即为*Binary的reflect.Value表示,isNil接受interface类型判断为nil
  • var b Binary; isNil(b)将会输出panix in isNil() 输入的b被赋值成<type=Binary, value=Binary(0)类型的interface,而reflect.ValueOf(s)返回了具体类型的reflect.Value表示,此处即为Binary(0)的reflect.Value表示,而reflect.Value.isNil只接受“ a chan, func, interface, map, pointer, or slice value”,故panic