回答

收藏

如何退出执行延迟调用的 go 程序?

技术问答 技术问答 192 人阅读 | 0 人回复 | 2023-09-12

我需要defer使用C库来释放手动创建的分配,但我也需要os.Exit非 0 状态在某些时候使用。棘手的部分是os.Exit跳过任何延迟指令:
2 `" r. g) o$ s" J; @! q
    package mainimport "fmt"import "os"func main(){     / / `defer`s will _not_ be run when using `os.Exit`,so    // this `fmt.Println` will never be called.    defer fmt.Println("!")    // sometimes ones might use defer to do critical operations    // like close a database,remove a lock or free memory    // Exit with status code.    os.Exit(3)}/ Z4 [7 ]1 ~7 b. ]- |: u  C+ y' m
               : R+ T, N7 v' t& S
    解决方案:                                                                $ R& r) a7 P+ N8 o; w) g" C# h
                                                                只需将您的程序向下移动一级,并返回您的退出代码:
3 T' }, K- A7 D% V) Z[code]package mainimport "fmt"import "os"func doTheStuff() int    defer fmt.Println("!")    return 3}func main()    os.Exit(doTheStuff()code]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则