Конкурентный вывод чисел в строгом порядке

Используйте горутину-потребитель, которая последовательно читает числа из канала и вызывает printNumber. Она сохранит порядок и секундную паузу, а main дождётся завершения.

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

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

Используйте горутину-потребитель, которая последовательно читает числа из канала и вызывает printNumber. Она сохранит порядок и секундную паузу, а main дождётся завершения.

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

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

Условие

Необходимо написать программу, использующую горутины, которая выводит числа от 1 до 10 последовательно, при этом перед печатью каждого числа делается пауза в одну секунду.

package main

import (
 "fmt"
 "time"
)

func main() {
 // ...
}

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

Ответ

Используйте горутину-потребитель, которая последовательно читает числа из канала и вызывает printNumber. Она сохранит порядок и секундную паузу, а main дождётся завершения.

К существующей printNumber добавьте:

func main() {
    numbers := make(chan int)
    done := make(chan struct{})
    go func() {
        defer close(done)
        for n := range numbers { printNumber(n) }
    }()
    for n := 1; n <= 10; n++ { numbers <- n }
    close(numbers)
    <-done
}

Здесь есть конкурентные producer и consumer, но печать намеренно последовательна. Это занимает примерно десять секунд или больше; независимые горутины с одинаковым Sleep не обеспечили бы ни порядок, ни отдельную паузу между числами.

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

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

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

Подробнее