回答

收藏

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

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

我需要defer使用C库来释放手动创建的分配,但我也需要os.Exit非 0 状态在某些时候使用。棘手的部分是os.Exit跳过任何延迟指令:
  l2 z# \5 m( h) ]+ a  ]2 \
    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)}
    0 p& I' M& D& g0 l* O- `
               
- c# p: W4 _9 Z* t  H    解决方案:                                                               
" e+ u3 |& j$ Q* ~8 ^& O% x6 i                                                                只需将您的程序向下移动一级,并返回您的退出代码:
: s9 C# q/ z! I% V  \- |0 E[code]package mainimport "fmt"import "os"func doTheStuff() int    defer fmt.Println("!")    return 3}func main()    os.Exit(doTheStuff()code]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则