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

获得反射的更好方法.Go中接口的类型

获得反射的更好方法.Go中接口的类型

Go
当年话下 2021-05-07 18:23:00
是否有reflect.Type比Go中更好的方法来获取接口reflect.TypeOf((*someInterface)(nil)).Elem()?它可以工作,但是每次滚动通过它时,我都会感到畏缩。
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

不幸的是,没有。尽管它看起来很丑陋,但实际上确实表达了获得所需信息所需的最少信息量reflect.Type。这些通常包含在var()具有所有此类必需类型的块的文件顶部,以使它们在程序初始化时计算,并且TypeOf每次函数需要该值时都不会招致查询损失。

这个习语在整个标准库中都使用,例如:

html/template/content.go: errorType = reflect.TypeOf((*error)(nil)).Elem()

这种冗长结构的原因源于它reflect.TypeOf是库的一部分而不是内置的,因此实际上必须取值。

在某些语言中,类型的名称是可以用作表达式的标识符。Go中不是这种情况。有效的表达式可以在spec中找到。如果类型的名称也可用作a reflect.Type,则它会为方法表达式带来歧义,因为reflect.Type它具有自己的方法(实际上,它是一个接口)。它还会将语言规范与标准库结合在一起,从而降低了两者的灵活性。


查看完整回答
反对 回复 2021-05-31
  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

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