// числа от 1 до 10

В представленном коде есть несколько ошибок:

Короткий ответ

Что ответить на собеседовании

В представленном коде есть несколько ошибок:

Подробный разбор

Ответ с пояснениями

Условие

// числа от 1 до 10 func main() { done := make(chan struct{}, 10)

for i:=1; i<=10; i++{
    go func(){
        defer func() {done<-struct{}{}}()
        printNumber(n)
    }()
}

for i:=1; i<=10; i++{
    <-done
}

}

func printNumber(n int) { time.Sleep(time.Second) fmt.Println(n) }

Ответ

В представленном коде есть несколько ошибок:

  1. В горутине используется переменная n, которая не определена. Нужно передавать i как параметр в анонимную функцию, чтобы избежать проблемы с замыканием.
  2. Канал done создан с буфером 10, что не критично, но можно сделать без буфера.

Исправленный вариант:

package main

import (
    "fmt"
    "time"
)

func main() {
    done := make(chan struct{})

    for i := 1; i <= 10; i++ {
        go func(n int) {
            defer func() { done <- struct{}{} }()
            printNumber(n)
        }(i)
    }

    for i := 1; i <= 10; i++ {
        <-done
    }
}

func printNumber(n int) {
    time.Sleep(time.Second)
    fmt.Println(n)
}

Объяснение:

  • Передача i в горутину как параметра n фиксирует значение для каждой итерации.
  • Канал done используется для синхронизации — главный поток ждёт завершения всех горутин.
  • printNumber выводит число с задержкой в 1 секунду.

Так программа корректно выведет числа от 1 до 10 (в любом порядке, так как горутины работают параллельно).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее