登录
首页 >  Golang >  Go问答

如何使用反射为结构体字段设置指针值

来源:stackoverflow

时间:2024-03-01 17:03:24 214浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《如何使用反射为结构体字段设置指针值》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我尝试通过反射为结构体字段(指针字段)设置值,但失败了。

  1. 我获取了结构体字段的名称,因此使用 fieldbyname 来获取该字段
  2. 该字段是一个指针。
  3. 我尝试使用 fieldbyname().set fieldbyname().setpointer 来设置值。
type t struct {
    b *int
}

func main() {
    t := new(ts)
    a := new(int)
    ss := reflect.valueof(t).fieldbyname("b").set(a)
}
type t struct {
    b *int
}

func main() {
    t := new(ts)
    a := new(int)
    ss := reflect.ValueOf(t).FieldByName("b").SetPointer(a)
}

第一个代码: =======> ./test.go:14:50:不能在reflect.valueof(t).fieldbyname("b").set的参数中使用(type *int)作为reflect.value类型 ./test.go:14:50:reflect.valueof(t).fieldbyname("b").set(a)用作值

第二个代码: =======> ./test.go:14:57:不能在reflect.valueof(t).fieldbyname("b").setpointer的参数中使用(type *int)作为unsafe.pointer类型 ./test.go:14:57:reflect.valueof(t).fieldbyname("b").setpointer(a)用作值

我想使用反射使指针字段(名称“b”)分配一个空间并设置一个值。


解决方案


type ts struct {
    B *int    //field must be exported
}

func main() {
    var t ts
    foo := 5
    a := &foo
    //Use Elem() to indirect through the pointer and get struct field
    //Use reflect.ValueOf(a) to satisfy Set() signature
    reflect.ValueOf(&t).Elem().FieldByName("B").Set(reflect.ValueOf(a))
    fmt.Println(*t.B)
}

演示 https://play.golang.org/p/gZt0ahTZMIi

终于介绍完啦!小伙伴们,这篇关于《如何使用反射为结构体字段设置指针值》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>