【发布时间】:2017-06-21 08:03:03
【问题描述】:
使用标准数据库/sql Row.Scan() 我在行中遇到空值问题。如果不考虑连续可能的空值,我会得到像<nil> -> *string 这样的扫描错误。这在使用 LEFT JOIN 查询或缺少 NO NULL 列约束的弱定义表时很常见。
有sql.NullXXX 类型(例如sql.NullInt64)可用于从一行中扫描可能的空值,然后检查该值是否为.Valid。但是,这些类型没有实现 JSON 编组,需要更多的逻辑和编码。
要解决这个问题,是在 SQL 查询中处理COALESCE() 列值更好的方法还是在 golang 代码中进行一些额外的编码?
【问题讨论】:
-
请参阅此SO post 自行处理可为空的值。建议:你可以试试这个库
github.com/guregu/null。 -
SQL 解决方案怎么样?我可以看到一些专业人士在查询中使用
COALESCE()值。您可以将值直接扫描为标准类型,也可以定义零以外的默认值。 -
在这两种情况下,您都必须采取一些额外措施来处理 null 并在适当的地方分配默认值。如果我看它,这是您的设计选择。您想在“分离关注点”中划清界限。应用代码还是数据库查询?