TGViewer
igoroutine.courses igoroutine.courses @igoroutine_courses · 239 subscribers
Post #41 3.54K
Разбор задачи с порядком вызова функций в select

Что будет выведено в stdout после запуска кода?

Go Playground

На первый взгляд может показаться, что здесь вывод недетерминирован. На самом деле мы имеем дело с очень тонкой гарантией из стандарта языка Go:

For all the cases in the statement right-hand-side expressions of send statements are evaluated exactly once, in source order, upon entering the "select" statement.


Это означает, что перед попыткой записи в ch1 и ch2 сперва будут вычислены функции get и getWithPanic, причем в порядке расположения в исходном коде.

Таким образом, будет выведено igoroutine courses, вывод из panic не учитывается, поскольку он пишется в stderr, а не stdout.

На практике это означает, что нужно быть готовым к тому, что функция в case может быть вызвана, но её возвращаемые значения и side-эффекты не будут использованы в соответствующей ветке.
  • 🤯 3
  • 😱 3
  • ❤ 2
More from @igoroutine_courses
  1. Jun 24, 2026Post #40
  2. Jun 24, 2026photo post
  3. Mar 24, 2026😎😎 Это изменение сломало set на map[key]struct{}, который мы знали Продолжение предыдуще…
  4. Mar 23, 2026😎😎 Это изменение сломало Set на map[key]struct{}, который мы знали В Go все привыкли пис…
  5. Mar 5, 2026😎😎 От этого data race не спасает даже race detector Продолжение к предыдущему посту. Ита…
  6. Mar 4, 2026😢😢 От этого data race не спасает даже race detector Data race это частный случай race co…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →