日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

php小編魚仔為您帶來關(guān)于在Go語言中如何使用非必需的JSON參數(shù)的技巧。在編寫Go程序時(shí),我們經(jīng)常需要處理JSON數(shù)據(jù),有時(shí)候我們可能只需要使用其中的一部分參數(shù),而不需要全部參數(shù)。本文將介紹如何在Go中使用非必需的JSON參數(shù),讓您能夠更靈活地處理JSON數(shù)據(jù),提高代碼的可讀性和可維護(hù)性。無論您是初學(xué)者還是有一定經(jīng)驗(yàn)的開發(fā)者,本文都將為您提供有用的技巧和示例代碼,幫助您更好地理解和應(yīng)用這一特性。讓我們一起來探索吧!

問題內(nèi)容

您好,我正在 Go 中開發(fā) Rest API,我希望用戶傳遞 JSON 參數(shù):

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"`

登錄后復(fù)制

但它們并不總是必需的,例如用戶可以僅傳遞 Offset 并忽略其他。他甚至可以發(fā)送0個(gè)參數(shù)。我怎樣才能做到這一點(diǎn)?

解決方法

從 JSON 文本中解組值時(shí),json 包不要求所有字段出現(xiàn)在 JSON 中,也不保證所有 JSON 字段都有匹配的 Go 字段。

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

需要注意的一點(diǎn)是,如果 JSON 文本中缺少某個(gè)字段,則 json 包不會(huì)更改相應(yīng)的 Go 字段,因此如果以“新鮮”開頭,零值,該字段將保留其類型的零值。

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

如果零值是有用且有效的,那么您可以轉(zhuǎn)向使用指針。例如,如果在您的應(yīng)用程序中,空 string 將是有效的 SortBy 值,您可以將此字段聲明為指針:*string。在這種情況下,如果 JSON 文本中缺少它,它將保留 nil,即任何指針類型的零值。

請(qǐng)參閱此示例:

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)
}

登錄后復(fù)制

輸出(在 Go Playground 上嘗試一下):

main.Data{I:1, S:"sv", P:(*string)(0x1050a150)} 
main.Data{I:1, S:"", P:(*string)(nil)} 
main.Data{I:0, S:"abc", P:(*string)(nil)} 

登錄后復(fù)制

分享到:
標(biāo)簽:Go語言
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定