等效于Java finalize方法

Go中是否有类似java finalize的方法?如果我有一个类似的类型结构


    type Foo struct {

        f *os.File

        ....

    }


func (p *Foo) finalize() {

     p.f.close( )           

}

如何确保在垃圾回收对象时关闭文件?


斯蒂芬大帝
浏览 206回答 2
2回答

烙印99

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

一只甜甜圈

您也不会在Java中这样做。在Java中要做的正确的事情是finally在您打开的位置附近有一个将其关闭的块。您可以在godefer函数中使用类似的模式进行清理。例如,如果您这样做(java):try {  open();  // do stuff} finally {  close();}在进行中,您可以这样做:open();defer close();// do stuff
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go