我找到了一些关于Go(golang)反射的代码,但我在获取基础值方面遇到了麻烦,以便我可以从结构体及其字段创建一个map[string]string
。
最终,我希望将结果转换为map[string]interface{}
,但这个问题有点儿阻塞我。
目前我所拥有的代码:
package main
import (
"fmt"
"reflect"
)
type Foo struct {
FirstName string `tag_name:"tag 1"`
LastName string `tag_name:"tag 2"`
Age int `tag_name:"tag 3"`
}
func inspect(f interface{}) map[string]string {
m := make(map[string]string)
val := reflect.ValueOf(f).Elem()
for i := 0; i < val.NumField(); i++ {
valueField := val.Field(i)
typeField := val.Type().Field(i)
f := valueField.Interface()
val := reflect.ValueOf(f)
m[typeField.Name] = val.String()
}
return m
}
func dump(m map[string]string) {
for k, v := range m {
fmt.Printf("%s : %s\n", k, v)
}
}
func main() {
f := &Foo{
FirstName: "Drew",
LastName: "Olson",
Age: 30,
}
a := inspect(f)
dump(a)
}
运行代码后的输出:
FirstName : Drew
LastName : Olson
Age : <int Value>
据我所了解,FirstName和LastName的输出是实际的reflect.Value对象,但对于字符串,value上的String()方法只会输出底层字符串。 我想要将int获取并转换为字符串,但是从反射包文档中我没有立即看到如何实现。
那么...我该如何在Go语言中获取reflect.Value的底层值?
reflect.Value
的 printf 将会(在 Go 1.5 中)打印它的实际值。请参见下面的我的回答。 - VonC