目录

说明1 reflect.Value区分CanSet和Can not Set

说明2 将值转成reflect.Value类型

说明3  reflect.ValueOf 参数必须是一个 指针 或  interface Elem()才可以正常调用

实例代码


说明1 reflect.Value区分CanSet和Can not Set

所以, 必须要返回成Can set的reflect.Value
如:

s := reflect.ValueOf(&t).Elem()

然后就可以happy的设值了, 可是不能随便设值的, 一个通用的方法就是使用Set(v Value)方法,

说明2 将值转成reflect.Value类型

下面的这段代码就是转成Value类型

sliceValue := reflect.ValueOf([]int{1, 2, 3}) // 这里将slice转成reflect.Value类型

说明3  reflect.ValueOf 参数必须是一个 指针 或  interface Elem()才可以正常调用

func (Value) Elem
func (v Value) Elem() Value

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 Ptr. It returns the zero Value if v is nil.

Elem返回接口v包含的值或指针v指向的值。 如果v的Kind不是Interface或Ptr,它会感到恐慌。 如果v为零,它将返回零值。

实例代码

代码1:

func Destroy(subj interface{}) {stype := reflect.ValueOf(subj).Elem()field := stype.FieldByName("Status")if field.IsValid() {field.SetString("Destroyed")}
}func TestDestroy(t *testing.T) {// Initialize datajaeger := Jaeger{Name: "Cherno Alpha", Country: "RU", Status: "Active"}kaiju := Kaiju{Alias: "Scissure", Origin: "Sydney", Status: "Unknown"}shatterdome := Shatterdome{Location: "Lima"}// Destroy everythingDestroy(&jaeger)Destroy(&kaiju)Destroy(&shatterdome)// Check the resultif jaeger.Status != "Destroy" {t.Error("jaeger was not destroyed")}if kaiju.Status != "Destroy" {t.Error("kaiju was not destroyed")}
}

代码2:

type T struct {Age intName stringChildren []int
}
t := T{12, "someone-life", nil}
s := reflect.ValueOf(&t).Elem()s.Field(0).SetInt(123) // 内置常用类型的设值方法
sliceValue := reflect.ValueOf([]int{1, 2, 3}) // 这里将slice转成reflect.Value类型
s.FieldByName("Children").Set(sliceValue)

golang 反射 reflect 设置 struct 字段相关推荐

  1. golang 反射 reflect包 struct相互填充

    最近在用Golang写一些简单的业务,经常需要在两类相似的结构体之间相互填充数据,如果struct只有少数几个field,相互赋值还好:struct有很多field的,实例代码如下: type Req ...

  2. Golang 通过jsonTag设置Struct或者Struct数组中的字段

    原文地址声明:https://blog.csdn.net/qq_23179075/article/details/118394526 package commonimport ("fmt&q ...

  3. golang 反射 获取 设置 结构体 字段值

    实例如下: type MyStruct struct {N int } n := MyStruct{ 1 }// get immutable := reflect.ValueOf(n) val := ...

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

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

  5. go struct 静态函数_Go语言学习笔记(四)结构体struct 接口Interface 反射reflect...

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

  6. Golang反射机制的实现分析——reflect.Type方法查找和调用

    在<Golang反射机制的实现分析--reflect.Type类型名称>一文中,我们分析了Golang获取类型基本信息的流程.本文将基于上述知识和经验,分析方法的查找和调用.(转载请指明出 ...

  7. golang中struct字段

    golang中struct字段名首字母必须大写,不然json无法解析 golang中struct字段后面json字段要小写或小写加下划线 golang中首字母大写表示共有

  8. Go语言--反射(reflect)

    0 反射的概念 反射是指计算机程序在运行时(runtime)可以访问.检测和修改本身状态或行为的一种能力.通俗地将,反射就是程序能够在运行时动态地查看自己的状态,并且允许修改自身的行为. 程序在编译时 ...

  9. 浅谈Java反射(Reflect)技术--常用方法

    Java反射(Reflect)技术 概念:动态获取在当前Java虚拟机中的类.接口或者对象等等信息(运行过程中读取内容) 1.作用(面试问题): 1.1 解除两个类之间的耦合性,即在未得到依赖类的情况 ...

最新文章

  1. js正则表达式/replace替换变量方法
  2. spring注解--@Bean
  3. 重磅!可以发朋友圈和搜一搜的PC端微信来了,赶紧来下载!
  4. YUV 后面数字的含义_高速公路标示牌上的字母和数字,到底什么意思?很多人都不知道...
  5. 手把手教你建github技术博客
  6. 文件包含漏洞不能包含php,ThinkPHP5漏洞分析之文件包含
  7. Combobox 控件绑定数据
  8. 导出excel数字前面的0消失_Excel操作中常见的3大坑你遇到过吗?遇到应该这么解决...
  9. 二级缓存失效_缓存核心技术:缓存穿透、缓存并发、缓存失效之思路变迁
  10. javascript date utc
  11. maven,eclipse--build时出现No compiler is provided in this environment
  12. ModbusTcp协议详解
  13. PMP考试心得分享(已通过)
  14. LVDT/RVDT(线性/旋转可变差动变压器)、Resolver(旋转变压器)仿真方案
  15. UnityShader笔记第三课-MVP矩阵原理-M矩阵
  16. 判断一个数是不是2的N次方 自己写的土算法
  17. U盘变32G的解决办法
  18. 魔改插线板,让电视控制周边设备开关机
  19. 2019北邮网安院机试真题(回忆版)@lantin
  20. 激活函数activation总结

热门文章

  1. 怎么改善现有网站为xhtml+CSS
  2. 文档标题:WinNTWin2K下实现进程的完全隐藏
  3. SD-WAN — 应用场景
  4. 软件性能测试类型和指标
  5. Python 常用 PEP8 编码规范和建议
  6. J-Flash的使用
  7. ANSI编码和标准代码页(code page)
  8. 聊聊lettuce的shareNativeConnection参数
  9. Mac下使用svn命令
  10. 从各方面数据来看《猎场》为什么收官后热度依旧