我試圖在迭代嵌套 for 回圈時更新和列印 Go 模板內的計數器變數。
我不是要列印的,要么是我的資料結構的指標通過我回圈。我不打算列印每個資料結構中的每個物件,我希望這個計數器變數只在等式陳述句為真時才增加。
我在這里做錯了什么?
去游樂場鏈接:https : //play.golang.org/p/RsuEk1PqZ7a
type a struct {
Numbers []string
Letters []string
}
var data = &a{
Numbers: []string{"one", "two"},
Letters: []string{"a","b","b", "c"},
}
var tmplSrc = `start
{{with $i := 0}}
{{range $number := .Numbers}}
{{range $letter := .Letters}}
{{if eq $letter "b"}}
{{$i = add $i 1}}
{{$i}}
{{end}}
{{end}}
{{end}}
{{end}}
fin
`
func main() {
funcMap := template.FuncMap{
"add": func(a int, b int) int {
return a b
},
}
tmpl := template.Must(template.New("test").Funcs(funcMap).Parse(tmplSrc))
tmpl.Execute(os.Stdout, data)
}
uj5u.com熱心網友回復:
tmpl.Execute execute 回傳的錯誤提示了問題:
測驗:3:21:在 <.Numbers> 處執行“測驗”:無法評估 int 型別的欄位數字
總是處理錯誤!
問題是{{with $i := 0}}設定.為0. 模板期望.是模板的資料引數。通過使用$來參考資料引數來修復。.Letters因為{{range}}也集需要類似的更改.。
{{with $i := 1}}
{{range $number := $.Numbers}}
{{range $letter := $.Letters}}
{{if eq $letter "b"}}
{{$i = add $i 1}}
{{$i}}
{{end}}
{{end}}
{{end}}
{{end}}
我曾經{{with $i := 1}}在操場上匹配代碼。問題使用{{with $i := 0}}. 問題中的代碼引入了另一個問題: 的內容{{with}}被跳過,因為條件評估為假(0 在模板條件中為假)。通過洗掉{{with}}指令進行修復。不需要。
{{$i := 0}}
{{range $number := $.Numbers}}
{{range $letter := $.Letters}}
{{if eq $letter "b"}}
{{$i = add $i 1}}
{{$i}}
{{end}}
{{end}}
{{end}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338472.html
