您现在的位置是:网站首页> 编程资料编程资料
golang通过反射设置结构体变量的值_Golang_
2023-05-26
383人已围观
简介 golang通过反射设置结构体变量的值_Golang_
如果需要动态设置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) } 以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
您可能感兴趣的文章:
相关内容
- 解决golang 反射interface{}做零值判断的一个重大坑_Golang_
- 深入Golang中的sync.Pool详解_Golang_
- Go语言-为什么返回值为接口类型,却返回结构体_Golang_
- go:垃圾回收GC触发条件详解_Golang_
- 基于go interface{}==nil 的几种坑及原理分析_Golang_
- golang interface判断为空nil的实现代码_Golang_
- golang判断key是否在map中的代码_Golang_
- 详解go中panic源码解读_Golang_
- Go语言操作数据库及其常规操作的示例代码_Golang_
- Go语言利用ssh连接服务器的方法步骤_Golang_
