ホームページ >バックエンド開発 >Golang >テンプレートのリフレクションを使用してソース コードから変数名を取得するにはどうすればよいですか?

テンプレートのリフレクションを使用してソース コードから変数名を取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-03 17:35:11905ブラウズ

How Can I Retrieve Variable Names from Source Code Using Reflection for Templating?

リフレクションを使用した変数名の取得

ユーザーフレンドリーなテンプレート システムを構築しようとすると、次のような疑問が生じます。次のような疑問が生じます。リフレクションを使用したソース コード?

目標は、変数 (文字列) のスライスを作成し、それを反復処理して置換することです。 {{}} プレースホルダーを実際の変数値でマークアップします。たとえば、変数名が 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。