首頁 > 後端開發 > Golang > 如何在 Go 中高效處理 SQL NULL 值及其 JSON 表示?

如何在 Go 中高效處理 SQL NULL 值及其 JSON 表示?

Mary-Kate Olsen
發布: 2025-01-03 06:22:39
原創
416 人瀏覽過

How to Efficiently Handle SQL NULL Values and Their JSON Representation in Go?

高效地使用SQL NULL 值和JSON

在本文中,我們解決了在Go 中使用SQL NULL 值的困境以及如何處理它們有效的JSON 表示。

使用 Go 類型(例如 int64 和 string)時,無法直接儲存 null 值。但是,我們可以使用 sql.NullInt64 和 sql.NullString 來實現此目的。然而,當這些類型嵌入到結構體中並使用 json 套件轉換為 JSON 時,產生的格式與使用常規 int64 和 string 類型時獲得的格式不同。

出現這種差異是因為 JSON 表示sql.Null*** 類型包括一個附加級別,因為這些類型本質上是結構本身。因此,需要一種解決方法來實現所需的 JSON 格式。

與其放棄在 SQL 資料庫中使用 NULL 值,一個可行的解決方案是建立一個實作 json 的自訂類型。 Marshaller 和 json.Unmarshaler 介面。透過嵌入 sql.NullInt64 類型,我們保留了 SQL 方法,同時獲得了對 JSON 處理的控制。以下是示範此方法的範例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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 表示形式與所需的格式一致。

要示範此解決方案,您可以在Go Playground 中執行以下程式碼:

1

2

3

4

5

6

7

8

9

10

11

12

func main() {

    type Person struct {

        Age     int64                `json:"age"`

        AgeJson JsonNullInt64        `json:"ageJson"`

    }

    p := Person{

        Age:     10,

        AgeJson: sql.NullInt64{Int64: 0, Valid: true},

    }

    b, _ := json.Marshal(p)

    fmt.Println(string(b))

}

登入後複製

輸出將類似於以下程式碼:

1

{"age":10,"ageJson":10}

登入後複製

這種方法允許無縫處理SQL 和JSON 中的NULL 值,保持資料表示的一致性。

以上是如何在 Go 中高效處理 SQL NULL 值及其 JSON 表示?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板