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

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...

GoLand中自定義結構體標籤不顯示怎麼辦?在使用GoLand進行Go語言開發時,很多開發者會遇到自定義結構體標籤在�...

Go爬蟲Colly中的Queue線程問題探討在使用Go語言的Colly爬蟲庫時,開發者常常會遇到關於線程和請求隊列的問題。 �...

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

Go語言中字符串打印的區別:使用Println與string()函數的效果差異在Go...

Go語言中結構體定義的兩種方式:var與type關鍵字的差異Go語言在定義結構體時,經常會看到兩種不同的寫法:一�...

Go語言中哪些庫是大公司開發或知名開源項目?在使用Go語言進行編程時,開發者常常會遇到一些常見的需求,�...
