ユーザーフレンドリーなテンプレート システムを構築しようとすると、次のような疑問が生じます。次のような疑問が生じます。リフレクションを使用したソース コード?
目標は、変数 (文字列) のスライスを作成し、それを反復処理して置換することです。 {{}} プレースホルダーを実際の変数値でマークアップします。たとえば、変数名が onevar の場合、システムはテンプレートで {{onevar}} をスキャンし、それを変数の値に置き換える必要があります。
このタスクには、変数を扱うときのリフレクションの性質を理解することが含まれます。提供されたコード スニペット:
onevar := "something" other := "something else" var msg string sa := []string{onevar, other} for _, v := range sa { vName := reflect.TypeOf(v).Name() vName = fmt.Sprintf("{{%s}}", vName) msg = strings.Replace(msg, vName, v, -1) }
コードはリフレクションを利用して変数名を取得しようとします:
vName := reflect.TypeOf(v).Name()
ただし、スライスには変数ではなく値が含まれるため、このアプローチは失敗します。 。したがって、スライスから変数名を取得することは不可能であることがわかります。
解決策:
この問題に対処するには、マップはキー (変数名) を関連付けるため、スライスの代わりにマップを使用することを検討してください。 ) 値:
vars := map[string]string{ "onevar": "something", "other": "something else", } var msg string for name, value := range vars { vName := fmt.Sprintf("{{%s}}", name) msg = strings.Replace(msg, vName, value, -1) }
以上がテンプレートのリフレクションを使用してソース コードから変数名を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。