Go中是否有类似java finalize的方法?如果我有一个类似的类型结构 type Foo struct { f *os.File .... }func (p *Foo) finalize() { p.f.close( ) }如何确保在垃圾回收对象时关闭文件?
2 回答
烙印99
TA贡献1829条经验 获得超13个赞
runtime.SetFinalizer
iirc。但是它被认为是一件坏事,并且不能保证在程序退出之前就可以运行
编辑:如下所述,当前os
包已runtime.SetFinalizer
在文件上调用。但是,SetFinalizer
不应该依赖它。作为一个为什么的例子,我有一个类似于文件服务器的应用程序,但我忘了关闭打开的文件。在GC将其选中并称为终结器之前,该过程通常可以获取约300个打开的文件。
一只甜甜圈
TA贡献1836条经验 获得超5个赞
您也不会在Java中这样做。在Java中要做的正确的事情是finally在您打开的位置附近有一个将其关闭的块。
您可以在godefer函数中使用类似的模式进行清理。例如,如果您这样做(java):
try {
open();
// do stuff
} finally {
close();
}
在进行中,您可以这样做:
open();
defer close();
// do stuff
- 2 回答
- 0 关注
- 205 浏览
添加回答
举报
0/150
提交
取消