您的位置:首页技术文章

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

【字号: 日期:2023-10-29 10:35:28浏览:77作者:馨心

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

代码如下:

package mainimport ( 'fmt' 'reflect')// 定义结构体Persontype 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.4fmt.Println(f) // 3.4p := reflect.ValueOf(&f) // 注意这里一定要是指针, 否则传递给ValueOf的是f的拷贝v := p.Elem()v.SetFloat(3.5)fmt.Println(f) // 3.5总结:

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

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

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

看代码吧~

package mainimport ('fmt''reflect')func reflectTest(str interface{}) {fs := reflect.ValueOf(str)fs.Elem().SetString('jack')fmt.Printf('%vn' ,fs.Elem())}func main(){var str string = 'tom'reflectTest(&str)fmt.Println(str)}

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

标签: Golang
相关文章: