Назад к вопросам
Junior — Middle
74
Можешь привести пример, когда и как используются каналы для обмена данными между потоками или горутинами?
Ответ от нейросети
sobes.tech AI
В Go каналы используются для безопасного обмена данными между горутинами, позволяя синхронизировать их работу и передавать значения.
Пример использования канала для передачи чисел от одной горутины к другой:
package main
import (
"fmt"
"time"
)
func producer(ch chan int) {
for i := 0; i < 5; i++ {
ch <- i // отправляем данные в канал
time.Sleep(time.Millisecond * 500)
}
close(ch) // закрываем канал после отправки всех данных
}
func consumer(ch chan int) {
for val := range ch { // получаем данные из канала
fmt.Println("Получено:", val)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
Здесь producer отправляет числа в канал, а consumer читает их. Каналы обеспечивают безопасную передачу данных без необходимости использовать мьютексы или другие механизмы синхронизации.