2 回答

TA貢獻1801條經驗 獲得超16個贊
首先,您的DataDB結構沒有名稱字段,因此您將無法在模板中引用它。
將您的模板更新為以下內容:
type DataDB struct {
ID int
Name string
Msg string
}
然后在您的聲明中設置一個名稱
justin := DataDB{ID: 1, Name: name, Msg: msg}
現在您可以.Name在模板中引用該字段
tpl, err := template.New("msgs").Parse(`
{{range .}}
Hello {{.Name}}, my name is {{.Msg}}
{{end}}
`)
最后,在模板中引用字段時,需要導出字段,所以它們都應該以大寫字母開頭。請參閱上面我的 DataDB 結構版本。
編輯,你不需要fmt.Sprintf(...)現在。

TA貢獻1848條經驗 獲得超2個贊
看來您的Msg包含Name + " " + Message,因此您需要將其拆分" "。
Go 模板是無邏輯的。但是您可以使用輔助函數來添加邏輯。
例如:
type DataDB struct {
ID int
Msg string
}
func (d *DataDB) Name() string {
return strings.SplitN(d.Msg, " ", 2)[0]
}
func (d *DataDB) Message() string {
res := strings.SplitN(d.Msg, " ", 2)
if len(res) < 2 {
return ""
}
return res[1]
}
并像這樣在模板中使用它們:
{{range .}}
Hello {{.Name}}, my name is {{.Message}}
{{end}}
工作示例
注意:上面的代碼效率稍低,因為它進行了兩次拆分,因此最好單獨創建一個struct僅用于顯示目的并在渲染模板之前填充它。
- 2 回答
- 0 關注
- 143 瀏覽
添加回答
舉報