Go反射问题记录panic: reflect: call of reflect.Value.Elem on struct Value [recovered]

发布时间:2024年01月06日

报错时的情景:

panic: reflect: call of reflect.Value.Elem on struct Value [recovered]
?? ?panic: reflect: call of reflect.Value.Elem on struct Value

基于反射给结构体赋值时出现的。

看看出问题的代码:

ms := Abc{}
sValue := reflect.ValueOf(ms).Elem()
sValue.Field(i).SetString("xxx")

原因正如所提示,在调用Elem时不能作用在结构体上,那怎么弄?

ms := &Abc{}
sValue := reflect.ValueOf(ms).Elem()
sValue.Field(i).SetString("xxx")

传指针,这样就OK了!

另外看Elem()方法的注释也能看出来:

// Elem returns the value that the interface v contains
// or that the pointer v points to.
// It panics if v's Kind is not Interface or Pointer.
// It returns the zero Value if v is nil.
func (v Value) Elem() Value {
...
}

即如果不是Interface or Pointer就会panic。

文章来源:https://blog.csdn.net/HYZX_9987/article/details/135251495
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。