我是 Go 新手,我必须编写一个应用程序,该应用程序必须在各个点打开大量文件。打开每个文件的代码是
fl, err := os.Open(..)
check(err)
defer fl.Close()
如果出现任何问题,check
只需调用where即可。panic
现在,正如我所说,该片段重复了很多次。我想要这样的东西:
func foo(f string){
fl, err := os.Open(f)
check(err)
defer fl.Close() //lolwut
}
当然一旦foo
返回,defer
就会启动并关闭文件。
有没有办法推迟一个函数的延迟,直到它的调用者决定它的时间?
到目前为止,我尝试做的是,将 defer 放在一个匿名函数中,foo
返回它并让调用者执行它(最好在单行中)。然而,我在实现这一点时遇到了一些障碍,我什至不确定这是否是正确的方法。
tl;dr:有没有办法将延迟推迟到 Go 中的调用函数?