为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕丝7291255 2022-09-05 17:33:49
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}}每当我填充一个范围内的变量时,它就会给我写一个空行。我该怎么做才能防止这种情况再次发生?
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

文本/模板,文本和空格的包文档:


默认情况下,执行模板时,将逐字复制操作之间的所有文本。[...]


但是,为了帮助设置模板源代码的格式,如果操作的左分隔符(默认为“{{”)紧跟减号和空格,则会从紧挨着的文本中删除所有尾随空格。同样,如果右侧分隔符 (“}}”) 前面有空格和减号,则会从紧随其后的文本中修剪所有前导空格。在这些修剪标记中,必须存在空格:“{{- 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: 0

User idx: 1

User idx: 2

User idx: 3


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信