f() {
defer
}
ну defer внутри функции f(). когда f отработала выполнится defer
Я вот так же предполагал. Но у меня почему-то этого видимо не происходит. Только при явном Close вконце он реально отрабатывает.
ну вряд ли это с defer связано. defer объявлен,функция закончила работу, срабатывает выражение из defer. только os.Exit() не даст defer исполниться, ну и фатальные ошибки и паники
так не бывает, коллега
насчет паник погорячился. простите. при панике отработает конечно
Безусловно. Я свой код читать то не могу. Поэтому где-то просто явно я не понимаю что происходит и что куда и как передаю. Но то что мне явное закрытие помогло это точно. Функция не имеет return и выглядит реально как f() и только вконце нее wg.Done. При этом я ее выполняю в цикле. А потом это еще и связано как-то с какими-то там каналами горутинами и т.д., чтобы я многопоточно нагружал с клиента сервер данными. Ну вы ж понимаете что я понимаю в своем проекте меньше чем вы?😂 Главное что благородные люди помогают и это срабатывает.
если бы вы скинули пример кода, возможно, вам бы разъяснилили в чем проблема и вы узнали бы еще один интересный фкакт)
https://play.golang.org/p/bHv47wFlue1 Вот :) Просто страшно показывать свой код людям. Это ж какой стыд!😂
просто у вас деферы сработаю только когда горутина addToDaenlab завершит работу в цикле и завершится, до этого времени. деферы будут создаваться только. А так как вы в цикле читаете канал, то завершится цикл, только по закрытию канала. Вот у вас все и копится практически до завершения main
for { go f() } func f() { for { defer } } это тоже самое что for { defer }
Вот я все так и предполагал, но ни словами описать не мог, ни объяснить что происходит. Благодарю за столь подробное разъяснение!
Ага, теперь то понял) Спасибо что вникли в проблему.
50 оттенков можно почитать если готур прошли. даже на русском есть https://habr.com/ru/company/mailru/blog/314804/#49
Спасибо, поизучаю обязательно.
Обсуждают сегодня