理解並使用 Golang 的 “omitempty” 特性

在使用 Go (Golang) 並將數據編碼爲 JSON 時,您可能會遇到這樣的情況:如果某些字段的值爲空,則需要從編碼輸出中省略這些字段。這就是 Golang 的 omitempty 功能發揮作用的地方。struct 字段標記中的 omitempty 選項會告訴編碼器,如果字段爲空值,則跳過該字段。

什麼是  “Empty Value”?

在 Go 中,Empty Value 的定義是:

使用案例

讓我們考慮一下網絡應用中的一種常見情況:您需要發送 JSON 格式的編碼數據。Go 的 JSON 處理方式可能與通常的 JSON 表示方式略有不同。

type Student struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

需要初始化一個學生對象並將其編碼爲 JSON:

student := Student{
    Name: "Denny",
    Age:  17,
}
jsonData, _ := json.Marshal(student)
fmt.Println(string(jsonData))

輸出結果是:

{"name":"Denny","age":17}

這可以達到預期效果。但如果學生的年齡未知呢?

student := Student{
    Name: "Denny",
}
jsonData, _ := json.Marshal(student)
fmt.Println(string(jsonData))

在這種情況下輸出結果將是:

{"name":"Denny","age":0}

使用  “omitempty” 處理未知的值

在上面的示例中,年齡字段被設置爲默認值 0,這看起來並不合理,因爲它可能會產生誤導。要避免這種情況,可以使用 omitempty 標籤:

type Student struct {
    Name string `json:"name"`
    Age  int    `json:"age,omitempty"`
}

現在,如果沒有提供年齡或年齡設置爲 0,JSON 輸出中將忽略年齡字段:

student := Student{
    Name: "Denny",
}
jsonData, _ := json.Marshal(student)
fmt.Println(string(jsonData))

輸出結果是:

{"name":"Denny"}

使用 Omitempty 標記後,如果年齡字段設置爲零值(整數爲 0),則不會包含在 JSON 輸出中。

總結

Golang 中的 omitempty 標籤是 JSON 編碼的一個強大功能。它能確保編碼輸出中不包含空值字段,從而防止誤導性數據表示並減小 JSON 有效載荷的大小。在需要發送準確的 JSON 響應的網絡應用程序和應用程序接口中,該功能尤其有用。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/5rRVmx0WBjfEScWy_XbHjQ