そのため、Go (golang) でリフレクションを開始するのに役立つコードを見つけましたが、基になる値を取得するのに問題があるため、基本的にmap[string]string
構造体とフィールドから を作成できます。
最終的には、結果を にしたいのですmap[string]interface{}
が、この 1 つの問題が私を妨げています。
私が現時点で持っているコード:
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 オブジェクトですが、文字列の場合、値の String() メソッドは基になる文字列を出力するだけです。int を取得して文字列に変更したいのですが、refect パッケージのドキュメントからは、それがどのように行われたのかすぐにはわかりません。
スー.... golangのreflect.Valueから基になる値を取得するにはどうすればよいですか?