我有一个结构如下
type pathObject struct {
s *gizmo.Session
finals bool
path *path.Path
}
我得到了这个结构,我需要提取路径对象,但我一直收到编译错误
这是我的转换代码
r := reflect.ValueOf(v)
for i := 0; i < val.NumField(); i++ {
valueField := val.Field(i)
typeField := val.Type().Field(i)
val.Interface()
if typeField.Name == "path" {
log.Printf("typeName %v\n", typeField.Name)
log.Printf("value %v\n", valueField)
f := reflect.Indirect(r).FieldByName("path")
log.Printf("CanInterface %v\n", valueField.Elem())
p := valueField.Elem().(path.Path)
//patObject := reflect.Indirect(valueField).FieldByName("path")
}
//f := valueField.Interface()
//val := reflect.ValueOf(f)
//slog.Printf("default %v\n", val)
}
我在这一行遇到编译错误 p := valueField.Elem().(path.Path) 说
invalid type assertion: valueField.Elem().(path.Path) (non-interface type reflect.Value on left)
关于如何克服错误并使其转换的任何线索?
最佳答案
断言调用 reflect.Value Interface() method 的结果的类型. Interface() 方法返回实际值。
p := valueField.Elem().Interface().(path.Path)
必须导出路径字段才能访问值:
type pathObject struct {
s *gizmo.Session
finals bool
Path *path.Path
}
试试这个更简单的代码:
func getPath(v interface{}) *path.Path {
r := reflect.Indirect(reflect.ValueOf(v))
f := r.FieldByName("Path")
return f.Interface().(*path.Path)
}
关于go - 将值转换为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47189580/