亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在結構值賦值期間省略函數調用的輔助返回

如何在結構值賦值期間省略函數調用的輔助返回

Go
慕沐林林 2022-09-19 17:10:32
我想在結構類型的變量聲明中賦值,但是,我需要調用一個函數,該函數返回一個次要值(錯誤),我想在賦值中忽略該值。有沒有辦法做到這一點?例如:type myStruct struct{    address common.Address}func main() {    newVar := myStruct{      address: common.HexToAddress("xyz")     }}問題是返回 2 個值,這是常見的。地址以及錯誤。我想省略錯誤并如上所述分配它。我寧愿不必做:common.HexToAddress()var newVar2 myStructmyStruct,_ = common.HexToAddress("xyz") 
查看完整描述

2 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

你可能正在尋找某種語法糖。Go故意在這些事情上稀疏,因為在語言設計師看來,它往往會使事情變得不那么晦澀難懂,從而降低可讀性。所以你在這里的選擇有限。


如果您真的不關心錯誤,以下是您的選擇:


按照您的建議分配給臨時變量(通常是最自然/可讀的選項):


addr, _ := common.HexToAddress("xyz")

newVar := myStruct{

    address: addr,

}

使用匿名函數的返回值:


newVar := myStruct{

    address: func() common.Address { addr, _ := common.HexToAddress("xyz"); return addr }(),

}

如果您控制了包,請考慮添加一個忽略(或導致)錯誤的變體:common


newVar := myStruct{

    address: common.MustHexToAddress("xyz"),

}

編寫您自己的包裝器函數:


func hexToAddress(hex string) common.Address {

    addr, _ := common.HexToAddress(hex)

    return addr

}


newVar := myStruct{

    address: hexToAddress("xyz"),

}


查看完整回答
反對 回復 2022-09-19
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

通常不建議忽略錯誤,這可能是該語言不容易的原因之一。


話雖如此,您有時看到的模式是提供功能的軟件包,對于那些只是在錯誤上執行操作是正確的做法的情況;例如,在初始化包級變量時。Mustpanic()


例如,有文本/模板。必須的。該實現只是測試錯誤,如果它不是零,則會崩潰。您也可以考慮添加這樣的函數(可能是文件的本地函數),允許您將結構初始化編寫為:


newVar := myStruct{

  address: must(common.HexToAddress("xyz")),

}

// ...

func must(address common.Address, err error) common.Address { ... }

這依賴于這樣一個功能,即如果一個函數返回多個值,而另一個函數采用相同數量的參數,則可以直接在前者的返回值上調用后者。


如果您不想走那么遠,則需要通過將第二個返回值分配給空白標識符來顯式忽略該值。當然,您可以單獨執行此操作,以便您仍然可以使用結構文本,但它可能不會比您最初建議的更干凈:_


address, _ := common.HexToAddress("xyz")

newVar := myStruct{address: address}


查看完整回答
反對 回復 2022-09-19
  • 2 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號