使用db.Queryrows.Scansql.NullString值填充NULL后,其.Valid字段为false,是否可以保证其.String保留空字符串""吗?

我问,因为如果我可以使用它,将很时髦:

res := ns.String

代替这个:
var res string
if ns.Valid {
    res = ns.String
}

https://golang.org/pkg/database/sql/#NullString

最佳答案

current implementation中,是的,但是文档明确表示要在使用String之前检查Valid。忽略文档需要您自担风险。

为了安全起见,只需将类型复制到自己的包装中即可;那么您就会知道下一个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 - Go的sql.NullString的值是否可预测为空?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49619620/

10-11 20:14