在Go模板中打印sql.NullString的值

时间:2017-09-21 08:45:47

标签: sql go struct go-templates

我从数据库中获取了详细信息,其中几列是sql.NullStringsql.NullInt64列。

现在,当我打印它们时,在检查它是否为Valid之后,它会以{3 true}格式打印数据。我只想从中打印值3

我怎样才能做到这一点?

目前这就是我正在打印的内容:

{{ range $value := .CatMenu }}
   ... // Other data
   {{ $value.ParentID }}  // This is sql.NullInt64 type
{{ end }}

1 个答案:

答案 0 :(得分:1)

sql.NullInt64是一个结构:

type NullInt64 struct {
    Int64 int64
    Valid bool // Valid is true if Int64 is not NULL
}

打印struct值时,默认格式是您当前看到的格式。

如果您之前检查它是否有效且非nil,则只需打印仅包含数值的NullInt64.Int64字段。

这是你可以做到的:

{{ range $value := .CatMenu }}
   ... // Other data
   {{ $value.ParentID.Int64 }}  // This is sql.NullInt64 type
{{ end }}

请参阅此简单示例进行测试:

vs := []*sql.NullInt64{
    {3, true},
    {2, true},
}

t := template.Must(template.New("").Parse(
    "{{range .}}{{.Int64}}\n{{end}}",
))

if err := t.Execute(os.Stdout, vs); err != nil {
    panic(err)
}

输出(在Go Playground上尝试):

3
2