1 回答

TA貢獻1757條經驗 獲得超7個贊
語言規范不支持對多個返回值進行不同處理。
但是,使用輔助函數很容易做到這一點:
func foo() (int, error) {
return 1, nil
}
func main() {
var all int
add := func(result int, err error) error {
all += result
return err
}
if err := add(foo()); err != nil {
panic(err)
}
if err := add(foo()); err != nil {
panic(err)
}
if err := add(foo()); err != nil {
panic(err)
}
fmt.Println(all)
}
這將輸出(在Go Playground3
上嘗試)。
如果您可以將錯誤處理移動到輔助函數中,它也可以如下所示:
var all int
check := func(result int, err error) int {
if err != nil {
panic(err)
}
return result
}
all += check(foo())
all += check(foo())
all += check(foo())
fmt.Println(all)
這輸出相同,在Go Playground上試試這個。
另一個變體可以是在輔助函數中做所有事情:
var all int
handle := func(result int, err error) {
if err != nil {
panic(err)
}
all += result
}
handle(foo())
handle(foo())
handle(foo())
fmt.Println(all)
在Go Playground上試試這個。
參見相關:單值上下文中的多個值
- 1 回答
- 0 關注
- 92 瀏覽
添加回答
舉報