【发布时间】:2014-08-03 15:18:04
【问题描述】:
我是 Go 新手,我必须编写一个应用程序,该应用程序必须在不同点打开大量文件。打开每个文件的代码是
fl, err := os.Open(..)
check(err)
defer fl.Close()
如果出现任何问题,check 只需调用 panic。
现在,正如我所说,sn-p 会重复很多次。我想要这样的东西:
func foo(f string){
fl, err := os.Open(f)
check(err)
defer fl.Close() //lolwut
}
当然,一旦foo 返回,defer 就会启动并关闭文件。
有没有办法延迟一个函数的延迟,直到它的调用者决定它的时间?
到目前为止,我尝试做的是,将 defer 放入一个匿名函数中,让 foo 返回它并让调用者执行 that(最好在单行中)。然而,我在实现它时遇到了一些障碍,我什至不确定这是否是正确的方法。
tl;dr:有没有办法将延迟延迟到 Go 中的调用函数?
【问题讨论】:
-
没有。你不应该对每一个可能的错误感到恐慌。学会正确处理它们。
-
@Wessie 就在这里。此外,
os.Open()在错误时返回nil,这是Close()的有效参数。您可以在Open()通话之后安全地推迟Close()。 -
@Wessie 文件错误的硬和快速失败恰好是我的要求,但否则我同意。干杯
-
@rath 你仍然可以使用 log.Fatal() 失败。请不要惊慌,这是不好的风格。
标签: go inline program-flow