Когато използвате канали като податки за функции, можете да укажете предназначението на канала – дали е само за изпращане или е само за получаване на данни. Тази особеност повишава сигурността на програмата по отношение на видовете данни.
import "fmt"
Тази функция пинг приема канал, предназначен само за
изпращане на стойности. Ако се опитаме да получим
стойност по него, няма да можем да компилираме
програмата.
func пинг(пингове chan<- string, писмо string) {
пингове <- писмо
}
Функцията понг приема един канал, предназначен само
за получаване на съобщения по него, наречен пингове,
и втори – за изпращане, наречен понгове.
func понг(пингове <-chan string, понгове chan<- string) {
понгове <- <-пингове
}
func main() {
заполучаване := make(chan string, 1)
запращане := make(chan string, 1)
пинг(заполучаване, "пратка")
понг(заполучаване, запращане)
fmt.Println(<-запращане)
}
$ go run channel-directions.go
пратка
Следващ пример: Избор на канал (select).