1
我有值的map
,看起來像這樣:迭代通過地圖圍棋文本模板
vals := map[string]interface{}{"foo": 1, "bar": 2, "baz": 7}
data := map[string]interface{}{"bat": "obj", "values": vals}
我應該我的模板模樣生成以下字符串(注意正確使用逗號)?
SET obj.foo=1, obj.bar=2, obj.baz=7
我開始用這個作爲我的模板:
SET {{range $i, $v := .values}} {{.bat}}.{{$i}}={{$v}},{{end}}
但是,這僅僅打印出
SET
而且即使沒有工作,逗號是不正確的。然後我嘗試使用自定義函數來格式化地圖,但是我無法讓模板調用我的函數。以下的無似乎工作:
SET {{.MyFunction .values}}
SET {{call .MyFunction .values}}
SET {{call MyFunction .values}}
時MyFunction的定義爲:
func MyFunction(data map[string]interface{}) string {
fmt.PrintLn('i was called!')
return "foo"
}
而且我使用一個輔助函數,看起來像這樣執行的模板:
func useTemplate(name string, data interface{}) string {
out := new(bytes.Buffer)
templates[name].Execute(out, data)
return string(out.Bytes())
}
謝謝!
啊,所以這就是你如何以正確的方式調用函數。完美的作品,謝謝! – Bill
@Gustavo,在這裏使用管道而不是簡單的函數調用有什麼好處?我建議使用'SET {{commaJoin $ .bat $ .values}}',恕我直言,它更容易理解。 – Kluyg
我傾向於將格式化邏輯寫爲流水線,因爲似乎更容易發現正在格式化的內容,但這確實是一種偏好問題。 –