由于详细的错误处理语法,我创建了一个函数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
答案 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的上下文中调用它是不好的。