Size: a a a

2021 May 14

АК

Александр Костюченко... in Go-go!
как скажете
источник

DP

Daniel Podolsky in Go-go!
в момент, когда твой `func() { defer f.Close() }` завершится. то есть, возможно, никогда, если он никогда не будет вызван
источник

p

pragus in Go-go!
fn, err := do()
if err == nil { fn() }
источник

с

сонная википедия... in Go-go!
равнозначно же просто передаче без дефер/замыкания с f.Close
источник

p

pragus in Go-go!
А, ну т.е. все-таки должен кто-то позвать эту fn()
источник

JI

Johnny Ipcom in Go-go!
Видимо он хочет вернуть функцию, которая закроет файл по требованию пользователя... Зачем-то. Непонятно, зачем там defer, func() {f.Close()} сработала бы так же...
источник

М

Мерль🛠 in Go-go!
ну вот когда fn выполнится, тогда и defer
источник

p

pragus in Go-go!
Вот. Это поведение ожидал, но решил уточнить что граблей нигде нет
источник

АК

Александр Костюченко... in Go-go!
я думаю Даниэль имел ввиду что в случае паники - return defer не сработает ....
источник

JI

Johnny Ipcom in Go-go!
Похожий приём graw использует...
источник

с

сонная википедия... in Go-go!
гугловский wire так передаёт финализаторы
источник

DP

Daniel Podolsky in Go-go!
коенчно
источник

p

pragus in Go-go!
Финализатор я хочу. Что-то вроде "тааакс, мы завершаемся. Пора убрать за собой"
источник

DP

Daniel Podolsky in Go-go!
передохни, бро. это от усталости
источник

М

Мерль🛠 in Go-go!
Подробнее можно тут https://golang.org/ref/spec#Defer_statements
источник

JI

Johnny Ipcom in Go-go!
тогда defer не нужен, у тебя функция-финализатор нифига не делает, кроме того, что вызывает этот defer... Да, в случае паники будет фигово.
источник

JI

Johnny Ipcom in Go-go!
func do() (func(), error) {
 f, err := os.Open("user")
 if err != nil {
   return nil, err
 }
 return func() { f.Close() }, nil
}
источник

JI

Johnny Ipcom in Go-go!
А ииспользовать как-то так...
источник

p

pragus in Go-go!
Пример - синтетика. Чисто для иллюстрации вопроса.
источник

JI

Johnny Ipcom in Go-go!
fin, _ :=  do()
defer fin()
источник