如何扫描一个可能为NULL的布尔值?

huangapple go评论144阅读模式
英文:

How to scan a boolean, which may be NULL?

问题

我尝试将一个布尔结果扫描到一个布尔指针中:

var expired bool
db.QueryRow(context.Background(), sql, id, n).Scan(&expired)

这段代码出现以下错误:

无法将 NULL 扫描到 *bool 中的 dest[0]

在 Go 中,我应该使用哪种类型来扫描 SQL 中的布尔值,它可以是 true、false 或 NULL?

英文:

I try to scan a boolean result into a boolean pointer:

var expired bool
db.QueryRow(context.Background(), sql, id, n).Scan(&expired)

The code fails with the following error:
> can't scan into dest[0]: cannot scan NULL into *bool

Which Go type do I have to use to scan a SQL boolean, which can be true, false and NULL?

答案1

得分: 2

我的建议是在使用bool时使用指针。

var expired *bool
db.QueryRow(context.Background(), sql, id, n).Scan(&expired)

因为bool只有falsetrue两个值,它无法表示NULL

sql.NullBool也是一个不错的选择。

英文:

My preference is using a pointer for bool

var expired *bool
db.QueryRow(context.Background(), sql, id, n).Scan(&expired)

As bool only have false and true values, it does not provide a way to represent NULL.

sql.NullBool is alse a good choice.

huangapple
  • 本文由 发表于 2023年6月15日 03:55:13
  • 转载请务必保留本文链接:https://go.coder-hub.com/76477121.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定