j:=1Kind的j就是reflect.Int,符合市场预期。var j interface{} = 1Kind的j也是reflect.Int。哪个值的种类reflect.Interface?
3 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
如果您正在寻找实用的解决方案,那么答案既简单又烦人。reflect.TypeOf
接受一个空接口类型,您可以在其中放入您想要传递的任何数据。这样做的问题是一个接口类型不能保存另一个接口类型,这意味着你不能有效地将一个接口传递给reflect.TypeOf
. 有一个解决方法,但它有点痛苦。您需要做的是创建一个复合类型(如结构或切片或映射),其中元素类型之一是接口类型,然后提取它。例如:
var sliceOfEmptyInterface []interface{} var emptyInterfaceType = reflect.TypeOf(sliceOfEmptyInterface).Elem()
即首先创建reflect.Type
的表示[]interface{}
(的切片interface{}
的类型),然后提取元素类型,这是interface{}
。
慕无忌1623718
TA贡献1744条经验 获得超4个赞
到目前为止,答案似乎令人惊讶地令人费解,而问题及其响应实际上很简单:reflect.Interface 是一种接口值。
你可以很容易地看到:
var v interface{}
var t = reflect.ValueOf(&v).Type().Elem()
fmt.Println(t.Kind() == reflect.Interface)
请注意,这ValueOf(v)是行不通的,因为您需要 v 本身的类型,而不是其内容。
- 3 回答
- 0 关注
- 219 浏览
添加回答
举报
0/150
提交
取消