在嘗試建立一個使用者友善的範本系統時,出現了一個問題:如何取得出現在中的變數名稱使用反射的原始碼?
目標是建立一個變數(字串)切片並迭代它,取代標記{{}} 佔位符與實際變數值。例如,如果變數名稱是 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中文網其他相關文章!