golang template模版如何判断变量是否存在/指针是否为空

golang template模版如何判断变量是否存在/指针是否为空

也就是语法{{if .Var}}的含义。
其含义是变量Var是否为真值,判断逻辑根据变量的类型,和golang语言本身判断变量是否为真的逻辑是一样的。

  • 数字型:值不等于零
  • 字符串:不是空串
  • 指针类型:不为空
  • 布尔类型:为True值

比较常用的是指针类型是否为空(对于其他基本类型来说,可以通过简单的比较运算来完成),语义上说就是属性是否存在,举个例子来说:

package main

import (
    "os"
    "log"
    "text/template"
)

type Address struct {
    City   string
    Street string
    Apt    int
}

func main() {
    templateText := `
{{if .Address}}
Apt is {{.Address.Apt}}.
{{else}}
Apt is NOT set.
{{end}}
`
    t := template.Must(template.New("anyname").Parse(templateText))
 
    templateVar := struct {
        Name    string
        Address * Address
    } {
        Name:   "Tom",
        Address: &Address {
            City: "Beijing",
            Street: "Changanjie",
            Apt: 0,
          },
    }
    err := t.Execute(os.Stdout, templateVar)
    if err != nil {
        log.Println("Executing template:", err)
    }

    templateVar = struct {
        Name    string
        Address * Address
    } {
        Name:   "Tom",
    }
    err = t.Execute(os.Stdout, templateVar)
    if err != nil {
        log.Println("Executing template:", err)
    }
}

运行结果就是:

Apt is 0.
Apt is NOT set.

第一个变量设置了Address,而第二个变量的Address为nil,所以就是通过变量{{.Var}}的语法来判定。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容