主页 > 知识库 > golang通过反射设置结构体变量的值

golang通过反射设置结构体变量的值

热门标签:excel地图标注分布数据 阿克苏地图标注 涿州代理外呼系统 评价高的400电话办理 电话机器人软件免费 寿光微信地图标注 百度地图标注后传给手机 外呼系统显本地手机号 外呼系统用什么卡

如果需要动态设置struct变量field的情况下, 可以利用reflect来完成。

代码如下:

package main
import (
 "fmt"
 "reflect"
)
// 定义结构体Person
type Person struct {
 Name string
 Age  int
}
func main() {
 person := Person{}
 fmt.Println(person) // 修改前 { 0}
 pp := reflect.ValueOf(person) // 取得struct变量的指针
 field := pp.Elem().FieldByName("Name") //获取指定Field
 field.SetString("gerrylon") // 设置值
 field = pp.Elem().FieldByName("Age")
 field.SetInt(26)
 fmt.Println(person) // 修改后 {gerrylon 26}
}

事实上对于原始值也是一样的, 要利用指针, 因为golang默认都是传值, 示例如下:

var f float64 = 3.4
fmt.Println(f) // 3.4
p := reflect.ValueOf(f) // 注意这里一定要是指针, 否则传递给ValueOf的是f的拷贝
v := p.Elem()
v.SetFloat(3.5)
fmt.Println(f) // 3.5

总结:

反射传入的应该是变量的指针

利用 FieldByName()方法可以设置struct的指定key的值, 非常强大。

补充:golang通过反射修改变量的值

看代码吧~

package main
import (
	"fmt"
	"reflect"
)
func reflectTest(str interface{}) {
	fs := reflect.ValueOf(str)
	fs.Elem().SetString("jack")
	fmt.Printf("%v\n" ,fs.Elem())
}
func main(){
	var str string = "tom"
	reflectTest(str)
	fmt.Println(str)
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文章:
  • go语言 全局变量和局部变量实例
  • golang 在windows中设置环境变量的操作
  • 详解Go语言变量作用域
  • 关于Golang变量初始化/类型推断/短声明的问题
  • 浅谈golang并发操作变量安全的问题
  • go语言的初始化顺序,包,变量,init详解
  • 解决golang 关于全局变量的坑

标签:吐鲁番 重庆 汕头 梅河口 兰州 鸡西 钦州 铜川

巨人网络通讯声明:本文标题《golang通过反射设置结构体变量的值》,本文关键词  golang,通过,反射,设置,结构,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《golang通过反射设置结构体变量的值》相关的同类信息!
  • 本页收集关于golang通过反射设置结构体变量的值的相关信息资讯供网民参考!
  • 推荐文章