有没有办法计入 Go 模板?

我正在尝试为 epub 创建一个 toc.ncx (只是一个 XML)文件。


在这样的目录中,<navpoint>定义了 s,每个都有一个 id 和一个“播放顺序”。


Go模板有什么方法可以简单地计算导航点吗?


我想过这样的事情(非工作模板代码)


{{$counter := 0}}

{{define "NAVPOINT"}}

  {{$counter = $counter + 1}}

  <navpoint id="{{.}}" playorder="{{$counter}}">

{{end}}


{{range .TopLevel }}

  {{template "NAVPOINT" .Id}}

  {{range .SecondLevel }}

    {{template "NAVPOINT" .Id}}

    </navpoint>

  {{end}}

  </navpoint>

{{end}}

示例结构


  { TopLevel: [

      { 

        Id: "id-a"

        SecondLevel: [

          {

            Id: "scnd-a"

          }

          {

            Id: "scnd-b"

          }

        ]

      }

      { 

        Id: "id-b"

        SecondLevel: [

          {

            Id: "scnd-c"

          }

          {

            Id: "scnd-d"

          }

        ]

      }

    }

这会给我这样的东西


  <navpoint id="id-a"      playorder="1">

     <navpoint id="scnd-a" playorder="2"></navpoint>

     <navpoint id="scnd-b" playorder="3"></navpoint>

  </navpoint>

  <navpoint id="id-b"      playorder="4">

     <navpoint id="scnd-c" playorder="5"></navpoint>

     <navpoint id="scnd-d" playorder="6"></navpoint>

  </navpoint>


我想我可以使用模板功能,而不是模板来实现这一点,但不知道如何实现这一点。模板函数可以有计数器吗?


繁星coding
浏览 98回答 1
1回答

梵蒂冈之花

这是我现在使用的功能:"navpoint": func() func(...string) string {&nbsp; &nbsp; i := 0&nbsp; &nbsp; return func(id ...string) string {&nbsp; &nbsp; &nbsp; &nbsp; if len(id) < 1 {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return "</navPoint>"&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; i++&nbsp; &nbsp; &nbsp; &nbsp; return `<navPoint id="` + id[0] + `" playorder"` + strconv.Itoa(i) + `">`&nbsp; &nbsp; }},我在模板中以这种方式使用它:{{$navpoint := navpoint}}{{range .TopLevel }}&nbsp; {{call $navpoint .Id}}&nbsp; {{range .SecondLevel }}&nbsp; &nbsp; {{call $navpoint .Id}}&nbsp; &nbsp; {{call $navpoint}}&nbsp; {{end}}&nbsp; {{call $navpoint}}{{end}}如果使用 id (XX) 调用“navpoint”,它会给出开始标签<navpoint id="XX" playorder="##">。在没有 id 的情况下调用时,它会给出结束标签</navpoint>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go