是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,但是如果你忽略了这些文档,你应该为将来的痛苦做好准备。