是Go';s sql.NullString';s值可预测为空?

是Go';s sql.NullString';s值可预测为空?,go,Go,使用db.Query和rows.Scan以NULL值填充sql.NullString后,其有效的字段为false,是否保证其.String将保存空字符串“” 我这样问是因为如果我能用这个会很时髦: res := ns.String 与此相反: var res string if ns.Valid { res = ns.String } 中的“是”,但文档明确表示在使用字符串之前检查有效性。忽略这些文档,风险自负 如果您希望安全,只需将类型复制到您自己的包中;那么你就知道它不会随着下一

使用
db.Query
rows.Scan
NULL
值填充
sql.NullString
后,其
有效的
字段为
false
,是否保证其
.String
将保存空字符串
“”

我这样问是因为如果我能用这个会很时髦:

res := ns.String
与此相反:

var res string
if ns.Valid {
    res = ns.String
}

中的“是”,但文档明确表示在使用字符串之前检查有效性。忽略这些文档,风险自负

如果您希望安全,只需将类型复制到您自己的包中;那么你就知道它不会随着下一个Go版本而改变

如果您不这样做,我强烈建议您编写一个测试:

func TestEmptyNullString(t *testing.T) {
    var x sql.NullString
    x.String = "foo"
    x.Scan(nil)
    if x.String != "" {
        t.Error("string not empty after Scan")
    }
}

从技术上讲,它应该是空的,因为Go字符串不能为null,但是如果你忽略了这些文档,你应该为将来的痛苦做好准备。