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 关注
- 102 浏览
添加回答
举报
