对于reflect: Elem of invalid type main.User类型的错误解释

一开始我的代码是这样的

func findTag(str interface{}) {
	t := reflect.TypeOf(str).Elem()
	for i := 0; i < t.NumField(); i++ {
		taginfo := t.Field(i).Tag.Get("info")
		tagdoc := t.Field(i).Tag.Get("doc")
		fmt.Println("info=", taginfo, "doc=", tagdoc)
	}
}

然后他就给我报了恐慌:reflect: Elem of invalid type main.User

这个原因是因为:

'typ' is a reflect.Type - the documentation for reflect.Type.Elem() states:

"Elem returns a type's element type. It panics if the type's Kind is not Array, Chan, Map, Ptr, or Slice."

Since the case is for either a Ptr or an Interface, this function panics when an interface type is given.

'typ' 是一个 reflect.Type - reflect.Type.Elem() 的文档说明:

“Elem 返回一个类型的元素类型。如果类型的 Kind 不是 Array、Chan、Map、Ptr 或 Slice,它会发生混乱。”

由于情况适用于 Ptr 或 Interface,因此当给定接口类型时,此函数会发生恐慌。

当然这跟vscode的版本有关,老版本用interface{}不会报错的~ 

于是乎我就将interface{}变成了User,但是后来又出异常:

"reflect: Elem of invalid type main.User"

下面是出现异常的函数

 不难看出,那里传的参数就是切片类型啊,,,,,所以我把User改成了*User,下面是改好的代码

 所以说,看源代码是很重要的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊的饲养员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值