golang text/templateの使い方:if,else,with

1552 ワード

golangのtext/templateパッケージは使用時にまだ不便で、特に論理判断にかかわる場合があります.テストの結果、次のような書き方が正しいことがわかりました.1.2.1の環境で問題なし!
関連資料:https://gowalker.org/text/template  .
eqは関数です.
package main

import "text/template"
import "os"

func main() {

	type Inventory struct {
		Material string
		Count    int
	}
	sweaters := Inventory{"axe", 0}
	html := `
	"test").Parse("{{.Count}} items are made of {{.Material}}"
	{{$a := .Count}}
	{{$b := 17}}
	{{$c := 18}}	
  
	{{if eq  .Count $b}}
	oo
	{{else}}
	xx
	{{end}}

	`
	tmpl, err := template.New("test").Parse(html)
	if err != nil {
		panic(err)
	}
	err = tmpl.Execute(os.Stdout, sweaters)
	if err != nil {
		panic(err)
	}

}
{{len .Statistics | print}}
{{$le:= len .Statistics}}

{{if eq $le 0}}  
    is 0  
{{else}}  
    not 0  
{{end}}

if/elseとor,eq関数の使い方
{{else if or (eq $e.Status -2) (eq $e.Status -3)}}
{{with and ($et := .Extension) ($ch := .Changelog) }} {{range $e := $ch}} ... {{$et.Name}} {{$e.Version}} {{end}} {{end}}
補足:
There is a variable, $, that you can use to solve your problem. From the text/template docs: "When execution begins, $ is set to the data argument passed to Execute, that is, to the starting value of dot."In your case: {{with  ($ch := .Changelog) }} {{range $e := $ch}} {{$e.CreateTime}} html1 {{with ($u:= $.User)}} html2 {{end}} {{end}} {{end}}
サポートされている文法は少ないですが、十分です!