This question already has answers here:
Use of defer in Go
(6个答案)
去年关闭。
据我所知,defer通常用于关闭或释放资源。
并且在代码块(函数)中使用
因此-如何解释此代码中
我希望看到这个:
但是知道了:
我哪里错了?
然后输出将是(在Go Playground上尝试):
(6个答案)
去年关闭。
据我所知,defer通常用于关闭或释放资源。
并且在代码块(函数)中使用
defer FUNC ()
可以确保FUNC ()
在此块(函数)返回任何错误或该块(函数)出现紧急情况时调用。因此-如何解释此代码中
defer
的行为:(Example):package main
import (
"fmt"
"errors"
)
func test() error {
err := errors.New("some error")
return err
}
func main() {
if err := test(); err!=nil {
fmt.Println("ERROR EXIT")
return
}
defer fmt.Println("DEFER EXIT")
fmt.Println("NORMAL EXIT")
}
我希望看到这个:
ERROR EXIT
DEFER EXIT
但是知道了:
ERROR EXIT
我哪里错了?
最佳答案
您可以在执行defer
语句之前,可以将fmt.Println()
调用“排队”之前从主函数返回。
更改为:
defer fmt.Println("DEFER EXIT")
if err := test(); err != nil {
fmt.Println("ERROR EXIT")
return
}
fmt.Println("NORMAL EXIT")
然后输出将是(在Go Playground上尝试):
ERROR EXIT
DEFER EXIT
关于go - 请在golang中说明DEFER的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55829756/
10-13 05:36