假设您有一个函数可以设置您的应用程序服务器并返回一个应该在您的应用程序退出之前立即运行的函数。
func main() {
defer applicationExit()
}
func applicationExit() func() {
fmt.Println(" Application Setup Call")
return func() {
fmt.Println("Application Tear Down Call")
}
}
您将获得以下输出。
输出:应用程序设置调用
出了什么问题?为什么我们看不到输出 Application Tear Down Call
最佳答案
您的代码完全符合预期:
func main() {
defer applicationExit()
}
翻译成英文,这段代码的意思是:
- Wait until
main
exits, then callapplicationExit()
.
事情是这样的。但是你似乎想要的是:
- Execute
applicationExit()
immediately, and store the return value for later.- Wait until application exits, then call the anonymous function returned by
applicationExit()
.
如果我们编写这段实际代码,我们会得到如下内容:
func main() {
cleanup := applicationExit() // Call applicationExit() immediately
defer cleanup() // Wait until main() exits, then call cleanup()
}
可以缩短为:
func main() {
defer applicationExit()()
}
关于go - 如何延迟函数返回的匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56472601/