tgoop.com/golang_interview/1261
Create:
Last Update:
Last Update:
📐 Базовая задача с собеседования на Go
Условие:
Нужно реализовать конвейер чисел:
1️⃣ В первый канал (naturals
) последовательно пишутся числа
2️⃣ Числа читаются из первого канала, возводятся в квадрат
3️⃣ Результат записывается во второй канал (squares
)
4️⃣ Главное — корректно закрыть каналы после работы
Решение:
package main
import "fmt"
func main() {
naturals := make(chan int)
squares := make(chan int)
// Горутина-писатель
go func() {
for x := 0; x <= 10; x++ {
naturals <- x
}
close(naturals) // Важно закрыть канал!
}()
// Горутина-обработчик
go func() {
for x := range naturals {
squares <- x * x
}
close(squares) // Важно закрыть канал!
}()
// Чтение результатов
for res := range squares {
fmt.Println(res)
}
}
Пояснение:
1️⃣ Создаем 2 канала: для исходных чисел и результатов
2️⃣ Первая горутина пишет числа 0-10 в
naturals
и закрывает канал3️⃣ Вторая горутина читает из
naturals
, вычисляет квадраты и пишет в squares
4️⃣ Главная горутина выводит результаты
6️⃣ Закрытие каналов предотвращает deadlock
@golang_interview
BY Golang вопросы собеседований
Share with your friend now:
tgoop.com/golang_interview/1261