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

我有以下情况,我将包含映射的结构传递给模板:


package main


import (

    "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以便我可以知道我看到了多少地图项目。


白猪掌柜的
浏览 123回答 1
1回答

动漫人物

一种解决方案是使plus1函数成为一个直接作用于 值的闭包codec:// first create a codec instancec := codec {a, 0}// now define the function as a closure with a reference to cfns := template.FuncMap{  "plus1": func() int {      c.Count++      return c.Count   },}// now we don't need to pass anything to it in the templatet := 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执行结束时保留。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go