为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中,reflect.Interface 是哪种值?

在 Go 中,reflect.Interface 是哪种值?

Go
SMILET 2021-06-25 13:04:57
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{}


查看完整回答
反对 回复 2021-06-28
?
慕无忌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 本身的类型,而不是其内容。


查看完整回答
反对 回复 2021-06-28
  • 3 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信