Go 接口是 (type, nil) 或 (type , value)

我想问一个关于接口为零的问题


//i think err should be a interface (*MyError, nil)

var err error = (*MyError)(nil)

fmt.Println(reflect.TypeOf(err)) 

fmt.Println(reflect.ValueOf(err))` 

结果告诉我接口值不是 nil 结果:


*main.MyError

<*main.MyError Value>

相当于interface(*main.MyError, <*main.MyError Value>) 为什么interface的值不是nil?


守着一只汪
浏览 299回答 2
2回答

MM们

这两件事是完全不同的:该nil接口值。它不包含基础类型或值。一种非易失nil接口值,其中包含基础类型和值,并且该下层值是nil在该基础类型(如果它是有一个称为值的类型之一nil-指针,切片,地图,通道或功能)。需要注意的是不同类型的nils为不同和不相关(指针-nil和MAP-nil无关);&nbsp;有些类型没有一个叫做值nil。你有nil指针(*MyError类型),并且赋值给一个接口变量(第一接口类型的error,然后转换为接口类型interface{}是的参数类型reflect.TypeOf()和reflect.ValueOf())。因此,这些功能收到未nil含有基础类型接口值*MyError与基础值nil。reflect.TypeOf(err)获取基础类型,即*MyError.&nbsp;并reflect.ValueOf(err)构造一个reflect.Value表示底层类型和值的对象。这就是你所看到的。所述的字串reflect.Value产生字符串<T value>,其中T是的类型,但它并不试图stringily(该值nil在这种情况下,指针)。如果您想打印基础值,也许您应该这样做fmt.Println(err)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go