Что выведет программа?
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.
C2.
AC3.
AB4. Программа зависнет
Ответ: 2. Вывод будет `AC`.
ch равен nil, поэтому отправка никогда не может выполниться и select выбирает default.Но перед выбором ветки Go один раз вычисляет каналы и правые части всех операций отправки. Поэтому
value() всё равно вызывается и печатает A. Затем выполняется default, который печатает C.#Golang #GoLang #Programming