为了账号安全,请及时绑定邮箱和手机立即绑定

如何更新 Go 模板中的字段值

如何更新 Go 模板中的字段值

Go
白猪掌柜的 2021-12-07 16:11:07
我有以下情况,我将包含映射的结构传递给模板:package mainimport (    "log"    "os"    "text/template")var fns = template.FuncMap{    "plus1": func(x int) int {        return x + 1    },}type codec struct {    Names map[string]string    Count int}func main() {    a := map[string]string{"one": "1",        "two":   "2",        "three": "3"}    t := template.Must(template.New("abc").Funcs(fns).Parse(`{{$l := len .Names}}{{range $k, $v := .Names}}{{if ne (plus1 $.Count) $l}}{{$k}} {{$v}} {{end}}{{end}}.`))    err := t.Execute(os.Stdout, codec{a, 0})    if err != nil {        log.Println(err)    }}我想增加 的Count字段,codec以便我可以知道我看到了多少地图项目。
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

一种解决方案是使plus1函数成为一个直接作用于 值的闭包codec:


// first create a codec instance

c := codec {a, 0}


// now define the function as a closure with a reference to c

fns := template.FuncMap{

  "plus1": func() int {

      c.Count++

      return c.Count

   },

}


// now we don't need to pass anything to it in the template

t := template.Must(template.New("abc").Funcs(fns).Parse(`{{$l := len .Names}}{{range $k, $v := .Names}}{{if ne (plus1) $l}}{{$k}} {{$v}} {{end}}{{end}}.`))

输出是:


one 1 three 3

我猜这就是你的目标?并且该值在c执行结束时保留。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信