2 回答

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

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}
- 2 回答
- 0 關注
- 106 瀏覽
添加回答
舉報