栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Go中有什么与finally()相反的init()吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go中有什么与finally()相反的init()吗?

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403775.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号