如果需要动态设置struct变量field的情况下, 可以利用reflect来完成。 代码如下: package main import ( "fmt" "reflect"
如果需要动态设置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)
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。
--结束END--
本文标题: golang通过反射设置结构体变量的值
本文链接: https://www.lsjlt.com/news/124488.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0