gpt4 book ai didi

go - 在 ptr 值上反射(reflect) : call of reflect. Value.FieldByName

转载 作者:IT王子 更新时间:2023-10-29 01:52:04 24 4
gpt4 key购买 nike

我有一个类似这个演示的数据结构。

type Family struct {
first string
last string
}
type Person struct {
name string
family *Family
}

func main(){
per1 := Person{name:"niki",family:&Familys{first:"yam",last:"bari"}}
Check(per1)
}

和代码:

var validate *validator.Validate
func Check(data interface{}) {
var v = reflect.ValueOf(data)

if v.Kind() == reflect.Struct {
fmt.Println("was a struct")
v = v.FieldByName("family").FieldByName("last")
fmt.Println(v)
}
}

当我不为 Family 使用 point 时,它返回“bari”并且没问题。但是使用 point 时,出现此错误。

reflect: call of reflect.Value.FieldByName on ptr Value

我搜索了很多,但找不到有帮助的答案。

最佳答案

正如您所注意到的,family*Family。正如错误所说,您不能在 reflect.Value 上调用 .FieldByName(...),其中该值是一个指针。

相反,您需要间接指向指针,以获取它指向的值,然后调用 .FieldByName(...)

familyPtr := v.FieldByName("family")
v = reflect.Indirect(familyPtr).FieldByName("last")

请参阅有关间接的文档:https://golang.org/pkg/reflect/#Indirect

关于go - 在 ptr 值上反射(reflect) : call of reflect. Value.FieldByName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50098624/

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