一开始我的代码是这样的
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,下面是改好的代码
所以说,看源代码是很重要的。