Гарантированного вывода нет: main не ждёт горутины и может завершиться без единой строки. Семантика захваченного i дополнительно зависит от версии языка Go.
Что отобразится в консоли при выполнении примера №28
Гарантированного вывода нет: main не ждёт горутины и может завершиться без единой строки. Семантика захваченного i дополнительно зависит от версии языка Go.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой вывод будет получен после запуска следующей программы:
import (
"fmt"
)
func main() {
for i := 0; i < 5; i++{
go func(){
fmt.Println(i)
}()
}
}
Ответ
Гарантированного вывода нет: main не ждёт горутины и может завершиться без единой строки. Семантика захваченного i дополнительно зависит от версии языка Go.
Для Go 1.22+ при таком объявлении каждая итерация имеет своё i, но порядок печати 0–4 остаётся произвольным. При старой семантике переменная общая и возникает гонка; популярный ответ «пять пятёрок» не гарантирован. Передавайте i аргументом и используйте WaitGroup, если нужно дождаться всех строк. Для строгого порядка печатайте синхронно или отдельно упорядочивайте результаты.
Источник: go.dev.