Что выведет код Middle Горутины и планировщик GMP обновлено

Что выведет Go: горутины пишут по индексу

Вопрос

Что выведет программа? Go 1.23, в go.mod указано go 1.23.

package main

import (
    "fmt"
    "sync"
)

func main() {
    nums := []int{1, 2, 3, 4, 5}
    res := make([]int, len(nums))
    var wg sync.WaitGroup
    for i, n := range nums {
        wg.Add(1)
        go func() {
            defer wg.Done()
            res[i] = n * n
        }()
    }
    wg.Wait()
    fmt.Println(res)
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: [1 4 9 16 25]. Горутины выполняются в любом порядке, но каждая пишет в свою ячейку, поэтому гонки нет, а итог детерминирован.

Что выведет

[1 4 9 16 25]

Разбор

Горутины выполняются в любом порядке, но каждая пишет в свою ячейку, поэтому гонки нет, а итог детерминирован. С Go 1.22 i и n свои на каждой итерации. wg.Wait() гарантирует, что все записи видны после него.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.