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 关注
- 157 浏览
添加回答
举报
