Sobes.tech
Назад к вопросам
Junior — Middle
80

Каким образом организовать взаимодействие и передачу данных через каналы в системе?

Компании, где спрашивали
Самокат Тех

Ответ от нейросети

sobes.tech AI

В Go взаимодействие между горутинами часто организуют через каналы (channels) — типизированные конвейеры для передачи данных.

Для передачи данных создаётся канал с помощью make(chan Type). Горутины могут отправлять данные в канал оператором <-, и получать из канала тем же оператором, что обеспечивает синхронизацию.

Пример:

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)
}

Таким образом, каналы позволяют безопасно и эффективно передавать данные между горутинами, избегая гонок и блокировок.