猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
Go 中是否有类似 finally() 之类的东西与 init() 正好相反?
Go 中有什么东西与
init()
包内的功能相反吗?
萧十郎
浏览 170
回答 1
1回答
PIPIONE
Go团队之前讨论过这个问题,结论是不增加支持。引用 minux:就个人而言,我更喜欢处理程序退出与程序崩溃完全相同的风格。我相信无论你怎么努力,你的程序在一些不可预见的情况下仍然会崩溃;例如,内存不足会使任何表现良好的 Go 程序崩溃,对此您无能为力;所以最好为他们设计。如果你遵循这个,你就不会觉得需要 atexit 来清理(因为当你的程序崩溃时, atexit 将无法工作,所以你根本不能依赖它)。但你仍然有一些选择:处理 CTRL+C如果你想在你的程序被CTRL+C(SIGINT)终止时做一些事情对象终结器另请注意,您可以为指针值注册终结器函数。当垃圾收集器发现一个无法访问的块与关联的终结器时,它会清除关联并f(x)在单独的 goroutine 中运行。您可以注册这样的终结器,runtime.SetFinalizer()这对您来说可能就足够了,但请注意:不能保证终结器会在程序退出之前运行,因此通常它们仅用于在长时间运行的程序期间释放与对象关联的非内存资源。看这个例子:type Person struct { Name string Age int}func main() { go func() { p := &Person{"Bob", 20} runtime.SetFinalizer(p, func(p2 *Person) { log.Println("Finalizing", p2) }) runtime.GC() }() time.Sleep(time.Second * 1) log.Println("Done")}输出(去游乐场):2009/11/10 23:00:00 Finalizing &{Bob 20}2009/11/10 23:00:01 Done
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Go
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续