Channel Directions

Напрямки каналу|Channel Directions #

// Використовуючи [канал](channels) як аргумент функції,
// ми можемо вказати його призначення: буде він використаний
// для відправки, чи для отримання значень. Це дуже корисно з
// точки зору додадкової безпеки типів значень

package main

import "fmt"

// Функція `ping` прийме канал, лише, для надсилання значень.
// Ви отримаєте помилку компіляції, якщо спробуєте отримати
// значення з цього каналу.
func ping(pings chan<- string, msg string) {
	pings <- msg
}

// Функція `pong` прийме перший канал для надсилання
// (`pings`), a другий для відправки (`pongs`) значень.
func pong(pings <-chan string, pongs chan<- string) {
	msg := <-pings
	pongs <- msg
}

func main() {
	pings := make(chan string, 1)
	pongs := make(chan string, 1)
	ping(pings, "passed message")
	pong(pings, pongs)
	fmt.Println(<-pongs)
}
$ go run channel-directions.go
passed message