【发布时间】:2014-11-17 15:38:36
【问题描述】:
Go 对于 bool 类型的零值是 false。 Postgres 支持未定义的 BOOL 类型,表示为 NULL。这会导致在 Go 中尝试从 Postgres 获取 BOOL 值时出现问题:
rows,err := db.Query("SELECT UNNEST('{TRUE,FALSE,NULL}'::BOOL[])");
if err != nil {
log.Fatal(err)
}
for rows.Next() {
var value bool
if err := rows.Scan(&value); err != nil {
log.Fatal(err)
}
fmt.Printf("Value: %t\n",value);
}
输出:
Value: true
Value: false
2014/11/17 09:34:26 sql: Scan error on column index 0: sql/driver: couldn't convert <nil> (<nil>) into type bool
解决这个问题最惯用的方法是什么?我想象的两种解决方案都不是很吸引人:
- 不要使用 Go 的
bool类型。相反,我可能会使用一个字符串,并进行自己的转换,这占nil - 始终使用
COALESCE()或其他方式确保 BOOL 在 Postgres 中为 TRUE 或 FALSE。
【问题讨论】:
标签: postgresql go boolean