有可能"返回"另一个函数的函数?

时间:2014-07-03 05:30:01

标签: go

由于详细的错误处理语法,我创建了一个函数check,如下所示,它充当了一个"全局"错误处理程序如果我想要恐慌而不是记录,我只更改check功能。问题是,现在我想简单return,以便其他一些例程如果有错误仍然可以运行。所以问题是:我怎么能这样做?有可能吗?

func main() {
    for k, v := range foo {
        go func() {
            err = doSomething()
            check("this one failed", err)
        }()
    }
}

func check(errMsg string, err error) {
    if err != nil {
        log.Fatalf(errMsg, err)
    }
}

但是现在我发现如果有任何错误而不是退出(log.Fatal)我需要返回匿名函数,所以我想知道是否可以返回anyonymou

2 个答案:

答案 0 :(得分:2)

您可以让检查功能返回bool

func checkIfFailed(errMsg string, err error) bool {
    if err != nil {
        log.Printf(errMsg, err)
        return true
    }
    return false
}

这样,您仍然可以在匿名函数的早期返回时调用您的支票(并在其中执行所有类型的检查):

err = doSomething()
if checkIfFailed("this one failed", err) {
    return
}

答案 1 :(得分:0)

没有语言功能允许您使父函数自动返回以响应简单的函数调用。

但是,有一种方法可以使当前的goroutine退出,这可能就是你所追求的:runtime.Goexit。请注意,这具有类似于调用os.Exit的破坏性潜力,因此在由其他包或其他无关代码创建的goroutine的上下文中调用它是不好的。