Golang快速初始化sql.Null *

时间:2014-12-20 10:16:23

标签: go

以下是效果很好的小代码段:

package main

import "fmt"
import "database/sql"


type Something struct {
    Int64 int64
    Valid bool
}

func main() {
    var s = sql.NullInt64{1, true}  // <- unkeyed fields warning
    var s1 = Something{1, true}
    fmt.Printf("Hello, %#v %#v\n", s, s1)
}

但是go vet抱怨:

test.go:12: database/sql.NullInt64 composite literal uses unkeyed fields

问题是:为什么它会在第12行抱怨并且不会在第13行抱怨?

2 个答案:

答案 0 :(得分:2)

它要求你添加密钥,例如

var s = sql.NullInt64{Int64: 1, Valid: true}

答案 1 :(得分:1)

要了解此行为,我们只需查看go vet存储库中go.tools的来源。

composite.go:46中,它会检查复合文字的类型。如果文字是当前包的一部分,go vet不会警告您关于未键控的值。

// A simple type name like t or T does not need keys either,
// since it is almost certainly declared in the current package

此检查可能存在,因为外部包可能会更改结构字段并破坏您的代码。键控字段使这不是一个问题。