一尘不染

模板范围内的最后一项

go

给定模板:

{{range $i, $e := .SomeField}}
        {{if $i}}, {{end}}
        $e.TheString
{{end}}

这可以输出:

one, two, three

但是,如果我要输出:

one, two, and three

我需要知道哪个是上述范围内的最后一个元素。

我可以设置一个变量,该变量保留数组的长度.SomeField,但是始终为3,并且$i上面的值永远只能为2。而且,根据我所见,您无法在模板中执行算术运算。

是否可以检测模板范围内的最后一个值?干杯。


阅读 145

收藏
2020-07-02

共1个答案

一尘不染

这可能不是最优雅的解决方案,但却是我能找到的最好的解决方案:

http://play.golang.org/p/MT91mLqk1s

package main

import (
    "os"
    "reflect"
    "text/template"
)

var fns = template.FuncMap{
    "last": func(x int, a interface{}) bool {
        return x == reflect.ValueOf(a).Len() - 1
    },
}


func main() {
    t := template.Must(template.New("abc").Funcs(fns).Parse(`{{range  $i, $e := .}}{{if $i}}, {{end}}{{if last $i $}}and {{end}}{{$e}}{{end}}.`))
    a := []string{"one", "two", "three"}
    t.Execute(os.Stdout, a)
}

注意: 您也可以使用以下len功能(不计入Russ Cox
的功能)进行反射:http :
//play.golang.org/p/V94BPN0uKD

cf

2020-07-02