質問: テンプレート システムのコンテキストで、変数の名前を取得するにはどうすればよいですか?リフレクションを使用してその値のみに基づいて名前を付けますか?これにより、テンプレート内のプレースホルダー値を実際の変数名に置き換えることができます。
リフレクションの使用:
リフレクションを使用して変数名を取得しようとしましたが、失敗しました。私が試したコードは次のとおりです。
onevar := "something" other := "something else" var msg string sa := []string{onevar, other} for _, v := range sa { vName := reflect.TypeOf(v).Name() // Attempt to get the variable name vName = fmt.Sprintf("{{%s}}", vName) // Prefix the name with "{{" and "}}" msg = strings.Replace(msg, vName, v, -1) // Replace the placeholder with the actual value }
スライス sa には変数名ではなく変数値のみが含まれるため、このアプローチでは望ましい結果が得られません。
Answer:
このシナリオでは変数名の取得にリフレクションを使用できません。スライス sa には、変数名そのものではなく、変数の値が含まれます。プレースホルダーを変数名に置き換えるという目的を達成するには、スライスの代わりにマップを利用することをお勧めします。マップは変数名をその値に関連付けることができるため、効率的かつ正確な置換が可能になります。
以上がリフレクションは Go の値から変数の名前を取得できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。