为了账号安全,请及时绑定邮箱和手机立即绑定

等效于Java finalize方法

等效于Java finalize方法

Go
斯蒂芬大帝 2021-04-02 10:11:56
Go中是否有类似java finalize的方法?如果我有一个类似的类型结构    type Foo struct {        f *os.File        ....    }func (p *Foo) finalize() {     p.f.close( )           }如何确保在垃圾回收对象时关闭文件?
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

runtime.SetFinalizeriirc。但是它被认为是一件坏事,并且不能保证在程序退出之前就可以运行

编辑:如下所述,当前os包已runtime.SetFinalizer在文件上调用。但是,SetFinalizer不应该依赖它。作为一个为什么的例子,我有一个类似于文件服务器的应用程序,但我忘了关闭打开的文件。在GC将其选中并称为终结器之前,该过程通常可以获取约300个打开的文件。


查看完整回答
反对 回复 2021-04-26
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您也不会在Java中这样做。在Java中要做的正确的事情是finally在您打开的位置附近有一个将其关闭的块。


您可以在godefer函数中使用类似的模式进行清理。例如,如果您这样做(java):


try {

  open();

  // do stuff

} finally {

  close();

}

在进行中,您可以这样做:


open();

defer close();

// do stuff


查看完整回答
反对 回复 2021-04-26
  • 2 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信