如何在 Go 中按名称设置结构字段的复合字段?
How to set the composite field of a struct field by name in Go?
我有一个结构,其中一个字段是另一个结构,我想按名称(作为参数)访问这个结构。我遵循 Using reflect, how do you set the value of a struct field? 并且它适用于基本类型但不适用于复合类型。
package main
import (
"fmt"
"reflect"
)
type PntInt struct {
p *int64
}
type Foo struct {
X int64
Px PntInt
}
func main() {
foo := Foo{}
fmt.Println(foo)
i := int64(8)
Pi := PntInt{&i}
reflect.ValueOf(&foo).Elem().FieldByName("X").SetInt(i)
reflect.ValueOf(&foo).Elem().FieldByName("Px").Set(Pi)
fmt.Println(foo)
}
设置整数有效,但尝试设置 "Px" 失败并出现错误
./prog.go:25:52: cannot use Pi (type PntInt) as type reflect.Value in argument to reflect.ValueOf(&foo).Elem().FieldByName("Px").Set
您想使用 Value
:
reflect.ValueOf(&foo).Elem().FieldByName("Px").Set(reflect.ValueOf(Pi))
我有一个结构,其中一个字段是另一个结构,我想按名称(作为参数)访问这个结构。我遵循 Using reflect, how do you set the value of a struct field? 并且它适用于基本类型但不适用于复合类型。
package main
import (
"fmt"
"reflect"
)
type PntInt struct {
p *int64
}
type Foo struct {
X int64
Px PntInt
}
func main() {
foo := Foo{}
fmt.Println(foo)
i := int64(8)
Pi := PntInt{&i}
reflect.ValueOf(&foo).Elem().FieldByName("X").SetInt(i)
reflect.ValueOf(&foo).Elem().FieldByName("Px").Set(Pi)
fmt.Println(foo)
}
设置整数有效,但尝试设置 "Px" 失败并出现错误
./prog.go:25:52: cannot use Pi (type PntInt) as type reflect.Value in argument to reflect.ValueOf(&foo).Elem().FieldByName("Px").Set
您想使用 Value
:
reflect.ValueOf(&foo).Elem().FieldByName("Px").Set(reflect.ValueOf(Pi))