一尘不染

Reflect.Value.FieldByName导致恐慌

go

调用反射值的.FieldByName方法时出现以下错误,确切的错误是:-

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

和代码是:-

s := reflect.ValueOf(&value).Elem() (value is a struct)
metric := s.FieldByName(subval.Metric).Interface() (subval.Metric is a string)

我了解的并不多,但这就是我所能获得的所有信息。

这是Go Playground上代码的链接:http :
//play.golang.org/p/E038cPOoGp


阅读 821

收藏
2020-07-02

共1个答案

一尘不染

value已经是一个指向结构的指针。尝试打印出s.Kind()您的代码。

没有理由使用的地址value,然后调用Elem()that reflect.Value,它会取消对刚创建的指针的引用。

s := reflect.ValueOf(value).Elem()
metric := s.FieldByName(subvalMetric).Interface()
fmt.Println(metric)
2020-07-02