Go 文本模板中最后一个元素的特殊情况处理
在 Go 的文本模板系统中,创建诸如“(p1, p2, p3)" 来自数组可能具有挑战性,特别是在最后一个正确放置逗号时
无效尝试
无法删除尾随逗号的一种尝试是:
import ( "text/template" "os" ) func main() { ip := []string{"p1", "p2", "p3"} temp := template.New("myTemplate") _, _ = temp.Parse(paramList) temp.Execute(os.Stdout, ip) } const paramList = "{{ $i := . }}({{ range $i }}{{ . }}, {{end}})"
解决方案
这个难题可以通过利用模板 if 语句的特殊语法来解决。与 Go if 语句不同,模板 if 可以测试零值。这允许使用以下技巧:
import ( "text/template" "os" ) func main() { ip := []string{"p1", "p2", "p3"} temp := template.New("myTemplate") _, _ = temp.Parse(paramList) temp.Execute(os.Stdout, ip) } const paramList = "{{ $i := . }}({{ range $i }}{{ if $index }},{{end}}{{ . }}{{end}})"
神奇之处在于:
{{ if $index }},{{end}}
$index 变量在范围迭代期间自动分配,用于测试最后一个元素。如果索引非零(意味着不是最后一个元素),则插入逗号。这可确保最后一个元素没有尾随逗号。
以上是如何避免 Go 文本模板字符串连接中的尾随逗号?的详细内容。更多信息请关注PHP中文网其他相关文章!