第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用不可為空的索引和 0 索引列表

如何使用不可為空的索引和 0 索引列表

Go
蝴蝶不菲 2022-09-12 20:20:48
如果我在結(jié)構(gòu)中傳遞一個(gè) int 值(在我的特定情況下,rpc 參數(shù)),則該語言不允許該屬性為零。int 的空值為 0。但 Go 使用 0 索引數(shù)組。我需要一種方法來區(qū)分空值和索引 0。對(duì)于這個(gè)問題,有沒有一個(gè)慣用的go解決方案?// this is psuedo-code I had written before hitting this problemif (args.maybeIndex != nil) {  doSomething(sliceOfNodes[args.maybeIndex])}
查看完整描述

1 回答

?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊

如果按值對(duì) int 進(jìn)行編碼,則對(duì)此無能為力 - 默認(rèn)值為 0。


確保在 Go 中編碼的可空性的常見方法是使用指針類型。使用 代替 a 可以區(qū)分“無”和 0。*intint


例如,使用 JSON 示例,請(qǐng)考慮以下結(jié)構(gòu):


type Options struct {

  Id      *string `json:"id,omitempty"`

  Verbose *bool   `json:"verbose,omitempty"`

  Level   *int    `json:"level,omitempty"`

  Power   *int    `json:"power,omitempty"`

}

這些數(shù)據(jù):


{

  "id": "foobar",

  "verbose": false,

  "level": 10

}

請(qǐng)注意,未指定“電源”。你可以寫一個(gè)反序列化器:


func parseOptions(jsn []byte) Options {

  var opts Options

  if err := json.Unmarshal(jsonText, &opts); err != nil {

    log.Fatal(err)

  }


  if opts.Power == nil {

    var v int = 10

    opts.Power = &v

  }


  return opts

}

這會(huì)將默認(rèn)值設(shè)置為“power”(如果未指定)。這使您可以區(qū)分“不存在”和“存在并且其值為0”。powerpower


如果您的編碼/ RPC機(jī)制不允許指針,則可以通過具有另一個(gè)名為“存在索引”或類似內(nèi)容的布爾字段來解決此問題。


最后,考慮設(shè)計(jì)程序,使其能夠適應(yīng)“未設(shè)置”和“設(shè)置為默認(rèn)值”之間的差異。IOW,只需接受默認(rèn)值和未指定的數(shù)據(jù)是相同的。從長(zhǎng)遠(yuǎn)來看,這將導(dǎo)致更干凈的設(shè)計(jì)和代碼,并且不易出錯(cuò)。


查看完整回答
反對(duì) 回復(fù) 2022-09-12
  • 1 回答
  • 0 關(guān)注
  • 94 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)