Goでは、このようなことをしたいと思います。私は多くの構造体を持つ大きなオブジェクトを持っています(Googleのprotobuf
を使用しています)。ここには工夫した例があります:ゴラン動的変数リファレンス
person.name = "testing"
person.address.street = "123 test st"
person.address.city = "tester"
person.address.zip = 90210
person.billing.address.same = true
私は動的に物事を参照したいと思います。たとえば、
key := "person.address.zip"
fmt.Println("the value of key: " + key) // would like to get 90210
key := "person.address.city"
fmt.Println("the value of key: " + key) // would like to get "tester"
これはGoで可能ですか?もしそうなら、どうしたらいいですか?基本的にはオブジェクトのサブセットのみを含むレポートを作成しており、ユーザーがキー/値をマップできるマッピングファイルを作成できるようにするために、プログラムから値が出力されます。私はpythonでこの作業を持っていますが、あなたがfunc (v Value) FieldByName(name string) Value
reflect
からパッケージ使用することができます行く:)
はい、可能です。それはあなたのパッケージを反映しています。リフレクションの欠点は、通常、大きな仕事量です。一方、リフレクションなしでは、html/templateやtext/templateのような完璧なパッケージは書くことができませんが、writtingのスタイルは(Pythonのような)インタプリタ言語のようです。 – lofcek
と反映が遅い、最後の手段である必要があります。 – OneOfOne
このようなものが本当に必要な場合は、構造体の値の階層ではなく、(ネストされた)マップを使用する必要があります。 – kostix