gpt4 book ai didi

go - 使用反射,如何将值设置为结构字段(指针)

转载 作者:IT王子 更新时间:2023-10-29 02:30:38 25 4
gpt4 key购买 nike

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

  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) 用作值

我想用reflect让指针字段(名称“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)
}

Playground https://play.golang.org/p/gZt0ahTZMIi

关于go - 使用反射,如何将值设置为结构字段(指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57146301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com