Go中是否有類似java finalize的方法?如果我有一個類似的類型結(jié)構(gòu) type Foo struct { f *os.File .... }func (p *Foo) finalize() { p.f.close( ) }如何確保在垃圾回收對象時關(guān)閉文件?
2 回答

烙印99
TA貢獻(xiàn)1829條經(jīng)驗 獲得超13個贊
runtime.SetFinalizer
iirc。但是它被認(rèn)為是一件壞事,并且不能保證在程序退出之前就可以運行
編輯:如下所述,當(dāng)前os
包已runtime.SetFinalizer
在文件上調(diào)用。但是,SetFinalizer
不應(yīng)該依賴它。作為一個為什么的例子,我有一個類似于文件服務(wù)器的應(yīng)用程序,但我忘了關(guān)閉打開的文件。在GC將其選中并稱為終結(jié)器之前,該過程通??梢垣@取約300個打開的文件。

一只甜甜圈
TA貢獻(xiàn)1836條經(jīng)驗 獲得超5個贊
您也不會在Java中這樣做。在Java中要做的正確的事情是finally在您打開的位置附近有一個將其關(guān)閉的塊。
您可以在godefer函數(shù)中使用類似的模式進(jìn)行清理。例如,如果您這樣做(java):
try {
open();
// do stuff
} finally {
close();
}
在進(jìn)行中,您可以這樣做:
open();
defer close();
// do stuff
- 2 回答
- 0 關(guān)注
- 231 瀏覽
添加回答
舉報
0/150
提交
取消