Go语言sql.NullString的Value是否可预测为空?Valid为false时取值疑问
关于Go语言sql.NullString的两个关键问题解答
咱来拆解你关心的这两个核心点:
1. sql.NullString的Value()方法行为是否可预测?
完全可以预测!根据标准库的定义:
- 当
ns.Valid为true时,Value()会返回ns.String的字符串值,对应SQL中的非空字符串; - 当
ns.Valid为false时,Value()会返回nil,对应SQL中的NULL值。
这个逻辑是固定无歧义的,完全可以放心依赖它的行为。
2. Scan到NULL值时,String字段是否一定为空字符串""?
答案是肯定的!当你通过rows.Scan把SQL的NULL值扫描到sql.NullString变量时,标准库的Scan方法会自动把该变量的Valid设为false,同时强制将String字段置为空字符串""。
也就是说,不管String字段之前是什么值,只要扫描的是NULL,最终它都会被重置为空串。所以你完全可以放心直接写:
res := ns.String
不用额外加判断逻辑——因为哪怕Valid是false,String也一定是空串,不会出现随机的垃圾值。
内容的提问来源于stack exchange,提问作者Miles
相关产品推荐
相关产品推荐

