TGViewer
Go tests Go tests @golangtests · 7.84K subscribers
Post #938 631
Задача по Go: `select` и побочные эффекты

Что выведет программа?


package main

import "fmt"

func value() int {
fmt.Print("A")
return 42
}

func main() {
var ch chan int

select {
case ch <- value():
fmt.Print("B")
default:
fmt.Print("C")
}
}


Варианты:

1. C
2. AC
3. AB
4. Программа зависнет

Ответ: 2. Вывод будет `AC`.

ch равен nil, поэтому отправка никогда не может выполниться и select выбирает default.

Но перед выбором ветки Go один раз вычисляет каналы и правые части всех операций отправки. Поэтому value() всё равно вызывается и печатает A. Затем выполняется default, который печатает C.

#Golang #GoLang #Programming
  • 👍 8
  • ❤ 1
More from @golangtests
  1. Sep 23, 2026Не застревайте в прошлом — учитесь новым навыкам и ИИ Чтобы успевать за требованиями рынка…
  2. Sep 13, 2026👣 Задача на Go 1.27: concurrent job scheduler с generic methods Нужно реализовать библиот…
  3. Sep 13, 2026🔥 Хочешь расти в IT быстрее остальных? Перестань учиться в одиночку Можно годами смотреть…
  4. Sep 2, 2026👣 Go 1.27: почему две разные closure внезапно могут иметь одинаковый адрес функции? Что в…
  5. Aug 21, 2026Go-задача: что выведет этот код? package main import "fmt" func main() { var funcs []func(…
  6. Aug 6, 2026Задача Go 1.26, на которой легко ошибиться даже опытному разработчику Что выведет этот код…
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 →