如何在Go模板中修剪空行?

go version go1.16.3 windows/amd64


我使用模板/html包。如果我在 html 中设置一个变量,



  {{range $kk, $vv := .Users -}}

      {{if eq $vv.Id $performedBy}}

          {{$pSurname = $vv.ContactData.Surname}} {{$pName = $vv.ContactData.Name}}

      {{- end}}

  {{- end}}

每当我填充一个范围内的变量时,它就会给我写一个空行。我该怎么做才能防止这种情况再次发生?


慕丝7291255
浏览 224回答 1
1回答

拉莫斯之舞

文本/模板,文本和空格的包文档:默认情况下,执行模板时,将逐字复制操作之间的所有文本。[...]但是,为了帮助设置模板源代码的格式,如果操作的左分隔符(默认为“{{”)紧跟减号和空格,则会从紧挨着的文本中删除所有尾随空格。同样,如果右侧分隔符 (“}}”) 前面有空格和减号,则会从紧随其后的文本中修剪所有前导空格。在这些修剪标记中,必须存在空格:“{{- 3}}”类似于“{{3}}”,但修剪紧挨着前面的文本,而“{{-3}}”解析为包含数字 -3 的操作。TLDR;模板中的所有(空白)空间在操作之间保留。如果您不需要它们,则可以在操作“就地”的开始定界符之后或结束定界符之前使用减号来修剪前导或尾随的空格。-您必须按照所需的输出方式缩进模板,或使用符号修剪格式缩进。-您的操作的主要问题:{{if}}  {{if eq $vv.Id $performedBy}}      {{$pSurname = $vv.ContactData.Surname}} {{$pName = $vv.ContactData.Name}}  {{- end}}在 的闭合分界符之后有一个换行符,如果执行 的主体,将保留该换行符。登录仅修剪此行符之前的换行符(变量赋值之后的换行符),而不是在 末尾。{{if}}{{if}}-{{- end}}{{- end}}{{if}}例如,使用此模板:const src = `{{$performedBy := "1"}}{{$pSurname := ""}}{{$pName := "" -}}{{range $kk, $vv := .Users -}}User idx: {{$kk}}{{if eq $vv.Id $performedBy -}}    {{- $pSurname = $vv.ContactData.Surname -}} {{- $pName = $vv.ContactData.Name -}}{{- end -}}{{- end}}`测试它:type CData struct {    Surname, Name string}type User struct {    Id          string    ContactData CData}func main() {    t := template.Must(template.New("").Parse(src))    p := map[string]interface{}{        "Users": []User{            {Id: "1", ContactData: CData{"Foo", "Bar"}},            {Id: "2", ContactData: CData{"Foo2", "Bar2"}},            {Id: "1", ContactData: CData{"Foo3", "Bar3"}},            {Id: "4", ContactData: CData{"Foo4", "Bar4"}},        },    }    if err := t.Execute(os.Stdout, p); err != nil {        panic(err)    }}输出(在Go Playground上尝试):User idx: 0User idx: 1User idx: 2User idx: 3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go