Я новичок в Go, и мне нужно написать приложение, которое должно открывать множество файлов в разных точках. Код для открытия каждого файла будет
fl, err := os.Open(..)
check(err)
defer fl.Close()
где check
просто вызывает panic
, если что-то пойдет не так.
Как я уже сказал, этот фрагмент повторяется несколько раз. Я хотел бы иметь что-то вроде этого:
func foo(f string){
fl, err := os.Open(f)
check(err)
defer fl.Close() //lolwut
}
Конечно, как только foo
вернется, defer
включится и закроет файл.
Есть ли способ отложить отсрочки для функции до тех пор, пока ее вызывающая сторона не решит, что пришло время?
Что я пытался сделать до сих пор, так это поместить отсрочку в анонимную функцию, заставить foo
вернуть ее и заставить вызывающую выполнить это (предпочтительно в однострочном режиме). Тем не менее, я сталкиваюсь с некоторыми препятствиями при реализации этого, и я даже не уверен, что это правильный подход.
tl;dr: Есть ли способ отложить отсрочку до вызывающей функции в Go?
os.Open()
возвращаетnil
при ошибке, что является допустимым аргументом дляClose()
. Вы можете безопасно отложитьClose()
сразу после вызоваOpen()
. - person fuz   schedule 03.08.2014