Что такое channel direction (направление канала)?

Junior
1.1k просмотров
AFK Offer AI

В Go можно ограничить канал только на чтение или только на запись. Это делается через типы <-chan T (только чтение) и chan<- T (только запись).

func producer(out chan<- int) {
    out <- 42
    close(out)
}

func consumer(in <-chan int) { for val := range in { fmt.Println(val) } }

func main() { ch := make(chan int) go producer(ch) consumer(ch) }

Смысл — в документировании намерений и защите от ошибок на этапе компиляции. Если функция принимает <-chan int, она не сможет случайно записать в канал или закрыть его. Двунаправленный chan T автоматически приводится к направленному типу, но не наоборот. Это хорошая практика — всегда указывать направление в сигнатуре функции.

Следующий вопрос

Как дебажить Go приложение?