首页 >后端开发 >Golang >如何在 Go 中有效处理 SQL NULL 值和 JSON?

如何在 Go 中有效处理 SQL NULL 值和 JSON?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-21 07:16:17571浏览

How to Handle SQL NULL Values and JSON Effectively in Go?

在 Go 中使用 SQL NULL 值和 JSON

在 Go 中使用可空值时,通常使用 sql.NullInt64 等类型和 sql.NullString。但是,当从包含它们的结构生成 JSON 时,这些类型可能会导致意外结果。具体来说,JSON 输出可能包含额外的级别,因为 sql.Null*** 也是一个结构体。

解决方法

要解决此问题,一种解决方法是创建一个实现 json.Marshaller 和 json.Unmarshaler 接口的自定义类型。通过嵌入 sql.NullInt64 类型,您可以无缝处理 SQL 方法,同时定义自己的 JSON 编组和解组行为。

这是一个示例:

type JsonNullInt64 struct {
    sql.NullInt64
}

func (v JsonNullInt64) MarshalJSON() ([]byte, error) {
    if v.Valid {
        return json.Marshal(v.Int64)
    } else {
        return json.Marshal(nil)
    }
}

func (v *JsonNullInt64) UnmarshalJSON(data []byte) error {
    // Unmarshalling into a pointer will let us detect null
    var x *int64
    if err := json.Unmarshal(data, &x); err != nil {
        return err
    }
    if x != nil {
        v.Valid = true
        v.Int64 = *x
    } else {
        v.Valid = false
    }
    return nil
}

当使用此自定义类型而不是sql.NullInt64,JSON 输出将采用您期望的格式,无需额外的

示例

您可以通过以下链接测试此示例:

http://play.golang.org/p/zFESxLcd -c

以上是如何在 Go 中有效处理 SQL NULL 值和 JSON?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn