Go模板如何仅当字符串字段非空时输出对应行并消除空行?
Go模板:根据字段是否为空控制行显示
你当前的模板里,{{if .Name}}{{end}}语句前后的换行符不管条件是否满足都会被保留,所以当Name为空时,就会多出一行空白。下面提供两种解决方法:
方法一:把换行包含在条件块内
将Name字段和后面的换行一起放在if块中,只有当Name非空时才会输出这一行内容和换行:
package main import ( "os" "text/template" ) type Restaurant struct { Name string } func main() { tmpl, err := template.New("test").Parse(`The restaurant is: {{if .Name}}{{.Name}} {{end}}The end. `) if err != nil { panic(err) } // 测试Name为空的场景 if err := tmpl.Execute(os.Stdout, Restaurant{Name: ""}); err != nil { panic(err) } // 测试Name非空的场景 println() if err := tmpl.Execute(os.Stdout, Restaurant{Name: "Itria"}); err != nil { panic(err) } }
输出结果
The restaurant is: The end. The restaurant is: Itria The end.
方法二:使用模板的-符号修剪空白
利用Go模板的-符号修剪掉不需要的换行符,{{-会修剪分隔符左侧的空白(包括换行),-}}会修剪右侧的空白:
package main import ( "os" "text/template" ) type Restaurant struct { Name string } func main() { tmpl, err := template.New("test").Parse(`The restaurant is: {{if .Name}} {{.Name}} {{- end}} The end. `) if err != nil { panic(err) } // 测试Name为空的场景 if err := tmpl.Execute(os.Stdout, Restaurant{Name: ""}); err != nil { panic(err) } // 测试Name非空的场景 println() if err := tmpl.Execute(os.Stdout, Restaurant{Name: "Itria"}); err != nil { panic(err) } }
输出结果
和方法一完全一致,满足你的需求。
内容的提问来源于stack exchange,提问作者Kurt Peek
相关产品推荐
相关产品推荐

