Отправка в канал
Операция отправки в канал выполняется с помощью оператора <-,
который помещает значение в канал. В левой части оператора
указывается канал, в правой - отправляемое значение.
Отправка в небуферизированный канал блокирует выполнение
горутины до тех пор, пока другая горутина не прочитает
это значение из канала.
Синтаксис
ch <- value
Пример
Давайте отправим значение в небуферизированный канал и прочитаем его в другой горутине:
package main
import "fmt"
func main() {
ch := make(chan int)
go func() {
ch <- 42
}()
res := <-ch
fmt.Println(res)
}
Результат выполнения кода:
42
Пример
Отправим строковое значение в буферизированный канал без блокировки:
package main
import "fmt"
func main() {
ch := make(chan string, 1)
ch <- "abcde"
res := <-ch
fmt.Println(res)
}
Результат выполнения кода:
"abcde"
Пример
Отправим несколько значений в буферизированный канал и прочитаем их в цикле:
package main
import "fmt"
func main() {
ch := make(chan int, 3)
ch <- 1
ch <- 2
ch <- 3
for i := 0; i < 3; i++ {
res := <-ch
fmt.Println(res)
}
}
Результат выполнения кода:
1
2
3
Смотрите также
-
операцию
получения из канала,
которая читает данные из канала -
понятие
каналов,
которые используются для обмена данными между горутинами -
конструкцию
буферизированных каналов,
которые позволяют отправлять данные без блокировки -
оператор
select,
который позволяет работать с несколькими каналами