首頁 > 後端開發 > Golang > 主體

如何在 Go 中使用非必要的 JSON 參數?

王林
發布: 2024-02-12 09:10:08
轉載
931 人瀏覽過

如何在 Go 中使用非必需的 JSON 参数?

php小編魚仔為您帶來關於在Go語言中如何使用非必需的JSON參數的技巧。在編寫Go程式時,我們經常需要處理JSON數據,有時我們可能只需要使用其中的一部分參數,而不需要全部參數。本文將介紹如何在Go中使用非必要的JSON參數,讓您能夠更靈活地處理JSON數據,提高程式碼的可讀性和可維護性。無論您是初學者還是有一定經驗的開發者,本文都將為您提供有用的技巧和範例程式碼,幫助您更好地理解和應用這一特性。讓我們一起來探索吧!

問題內容

您好,我正在 Go 中開發 Rest API,我希望使用者傳遞 JSON 參數:

Offset int64  `json:"offset"`
Limit  int64  `json:"limit"`
SortBy string `json:"sortby"`
Asc    bool   `json:"asc"`
Username   string `json:"username"`
First_Name string `json:"first_name"`
Last_Name  string `json:"last_name"`
Status     string `json:"status"`
登入後複製

但它們並不總是必需的,例如用戶可以僅傳遞 Offset 並忽略其他。他甚至可以發送0個參數。我怎樣才能做到這一點?

解決方法

從JSON 文字中解組值時,#json 套件不要求所有欄位出現在JSON 中,也不保證所有JSON 欄位都有相符的Go 欄位。

所以你沒有什麼特別的事情要做,只需將你所擁有的東西整理成 Go 值你想要或可能想要的東西。

需要注意的一點是,如果JSON 文字中缺少某個字段,則json 套件不會更改相應的Go 字段,因此如果以「新鮮」開頭,零值,該欄位將保留其類型的零值。

大多數情況下,這足以檢測字段(在JSON 中)是否存在,例如,如果在Go 結構中您有一個string 類型的SortBy 字段,如果JSON中缺少該字段,它將保留空string: "".

如果零值是有用且有效的,那麼您可以轉向使用指標。例如,如果在您的應用程式中,空 string 將是有效的 SortBy 值,您可以將此欄位宣告為指標:*string。在這種情況下,如果 JSON 文字中缺少它,它將保留 nil,即任何指標類型的零值。

請參閱此範例:

type Data struct {
    I int
    S string
    P *string
}

func main() {
    var d Data
    var err error

    d, err = Data{}, nil
    err = json.Unmarshal([]byte(`{"I":1, "S":"sv", "P":"pv"}`), &d)
    fmt.Printf("%#v %v\n", d, err)

    d, err = Data{}, nil
    err = json.Unmarshal([]byte(`{"I":1}`), &d)
    fmt.Printf("%#v %v\n", d, err)

    d, err = Data{}, nil
    err = json.Unmarshal([]byte(`{"S":"abc"}`), &d)
    fmt.Printf("%#v %v\n", d, err)
}
登入後複製

輸出(在 Go Playground 上嘗試):

main.Data{I:1, S:"sv", P:(*string)(0x1050a150)} <nil>
main.Data{I:1, S:"", P:(*string)(nil)} <nil>
main.Data{I:0, S:"abc", P:(*string)(nil)} <nil>
登入後複製

以上是如何在 Go 中使用非必要的 JSON 參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!