chan<- int?chan<- int - канал, в который можно только отправлять. <-chan int - только получать. Используются в сигнатурах функций, чтобы ограничить использование канала (только отправка или только приём).
func producer(ch chan<- int) {
ch <- 1
}
func consumer(ch <-chan int) {
v := <-ch
}
c := make(chan int)
producer(c)
consumer(c)
Двунаправленный канал приводится к однонаправленному неявно.