本文主要是介绍Go反射问题记录panic: reflect: call of reflect.Value.Elem on struct Value [recovered],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
报错时的情景:
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。
这篇关于Go反射问题记录panic: reflect: call of reflect.Value.Elem on struct Value [recovered]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!