报错时的情景:

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。

解决panic: reflect: call of reflect.Value.Elem on struct Value [recovered]相关推荐

  1. 【Go】panic: reflect: call of reflect.Value.FieldByName on ptr Value

    产生原因 调用 FieldByName()方法时,调用者与预期类型不相符. // 错误代码 func setNewArticleInfoToCache(article *Article) {field ...

  2. go学习之异常记录01:panic: reflect: call of reflect.Value.NumField on int Value

    代码: package mainimport ("fmt""reflect""strconv""strings" )ty ...

  3. go语言反射机制、reflect.TypeOf、 reflect.ValueOf、字符串处理(详解)

    文章目录 前言 一.反射基本概念 ①go语言反射为何而生? ②反射弊端 ③怎样使用反射机制? 一.反射使用到的库及常用函数 ①用到的库 ②常用的字符串处理函数 (1) 将字符串加载为固定的类型strc ...

  4. Go 语言编程 — reflect 反射机制

    目录 文章目录 目录 为什么需要反射? reflect 包 通过 reflect.TypeOf() 获取对象的反射类型 reflect.Type 通过 reflect.Elem() 获取指针所指向的对 ...

  5. Golang的反射reflect深入理解和示例

    [TOC] Golang的反射reflect深入理解和示例 [记录于2018年2月] 编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机 ...

  6. Go Reflect

    最近在看一些go语言标准库以及第三方库的源码时,发现go的reflect被大量使用,虽然反射的机制大多数语言都支持,但好像都没有go一样这么依赖反射的特性.个人觉得,reflect使用如此频繁的一个重 ...

  7. golang reflect

    go语言中reflect反射机制.详细原文:地址 接口值到反射对象 package mainimport ("fmt""reflect" )func main( ...

  8. golang Reflect包

    2019独角兽企业重金招聘Python工程师标准>>> Reflect包 Reflect 反射包有2个重要的类型,分别通过Typeof()和ValueOf()返回. 分别在源码包里的 ...

  9. 反射(reflect)机制

    什么是反射 官方对此有个非常简明的介绍,两句话耐人寻味: 反射提供一种让程序检查自身结构的能力 反射是困惑的源泉 要深刻理解反射,个人感觉需要花时间在官方博客上再加以练习,循序渐进,慢慢体会. 反射的 ...

最新文章

  1. 客户端(C#)调用CXF搭建的webservice的出现一些问题记录
  2. Standby Redo Log 的设定原则、创建、删除、查看、归档位置
  3. elementui table 不显示表头_不懂就问 || 单晶XRD第二期课后答疑出炉啦!!
  4. java comparable接口_Java面试题之Java集合篇三
  5. CCF真题 201312-2 ISBN号码
  6. 云计算-openstack简介
  7. [js] 请使用js实现一个秒表计时器的程序
  8. 软件工程 - 设计模式学习之工厂方法模式Factory Method
  9. HIVE: hive.error.on.empty.partition
  10. Python解决模块无法引用问题之pymysql模块导入
  11. linux安装neo4j
  12. 图像处理_形态学运算中的膨胀与腐蚀直观理解
  13. 读react.js小书 中组件的render的方法(从零学react)
  14. 8uftp无法取得目录列表,解决8uftp无法取得目录列表的问题只需4步
  15. HTML怎么设置左边外距5像素,css怎么设置左边距
  16. Mac系统常用软件总结
  17. echarts省级地图显示(入门)
  18. seaborn小提琴图
  19. 如何查看计算机是否新装了硬盘,如何查看笔记本电脑换固态硬盘 判断笔记本电脑是否可换固态硬盘的技巧...
  20. 怎么设置android投屏 桌面程序,手机怎么投屏到电脑?

热门文章

  1. 火车浏览器怎么样,是什么样特性
  2. 了解全角和半角,以及全角和半角的相互转换
  3. 女神节表白:因一个分号被拒
  4. python socket 域名_python实现域名系统(DNS)正向查询的方法
  5. python+sklearn,机器学习-线性回归实现-以披萨尺寸预测价格
  6. oppo r9 android 版本,OPPO R9s直接升安卓7.1:被曝只是改了版本号?
  7. Windows sever 2019AD域怎么设置域内计算机屏幕锁屏时间
  8. 高斯模糊加图片展示(仿ipad qq图片点击展示)
  9. 优化算法:指数加权平均
  10. softmax 回归