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中文網其他相關文章!