例如:
{{range .Users}}
{{if .IsAdmin}}
{{/* How to use "break" or "continue"? */}}
{{end}}
{{end}}
中未提供模板中“中断”或“继续”的文档
答案 0 :(得分:3)
break
和continue
语句是Go 1.10中text/template
和html/template
的一部分(在撰写本文时为Beta版)。来自release notes:
新动作
{{break}}
和{{continue}}
突破了最内层{{range ...}}
循环,与相应的Go语句一样。
Go的早期版本(在1.10之前)执行 支持break
或continue
语句。
查看测试版文档,您可以看到lexer中的新itemContinue
和itemBreak
项目,Parser中的ContinueNode
之类的新节点代码。
答案 1 :(得分:2)
它们没有记录,因为它们不存在。
要确保 - 请检查text/template
词法分析器的测试:https://github.com/golang/go/blob/master/src/text/template/parse/lex_test.go
答案 2 :(得分:0)
这些功能是作为Beta功能短暂添加的,但此后已回滚。我刚刚用go1.12.5进行了测试,但它们仍然不可用。
这是github问题:https://github.com/golang/go/issues/20531
答案 3 :(得分:0)
您可以使用变量添加处理中检查,并在循环的其余部分跳过任何现有检查。
// method 1
{{ $dothing := false }}
{{ range $i, $A := .List }}
{{ if $A.Check }}
{{ $dothing = true }}
{{end}}
{{ end }}
{{ if $dothing }}
// do thing
{{ end }}
// method 2
{{ $already := false }}
{{ range $i, $A := .List }}
{{ if $already }}
{{ else }}
{{ if $A.Check }}
{{ $already = true }}
// do thing
{{ end }}
{{ end }}
{{ end }}
答案 4 :(得分:0)
从 Go 1.18 开始,Go 模板的范围循环可能支持“break”和“continue”。
注意:Go101 does mention 应于 2022 年第一季度发布。
这将解决 Go 1.18 文本/模板:添加 break
和 continue
支持。
并且目前在 issue 20531: html/template
, text/template
: 实现 break
和 continue
for range
循环中实现。
目前这项工作仍在进行中(2021 年第一季度)