Конкурентность каналов в Golang

Beginner

This tutorial is from open-source community. Access the source code

Введение

Лаборатория Каналов предназначена для проверки вашего понимания каналов в Golang. Каналы используются для соединения конкурентных goroutine, позволяя передавать и получать значения между ними.

Каналы

В этой лаборатории вам нужно создать новый канал и отправить в него значение из новой goroutine. Затем вы получите значение из канала и выведете его на экран.

  • Вы должны использовать синтаксис make(chan val-type) для создания нового канала.
  • Канал должен быть типизирован значениями, которые он передает.
  • Вы должны использовать синтаксис channel <- для отправки значения в канал.
  • Вы должны использовать синтаксис <-channel для получения значения из канала.
  • Вы должны использовать новую goroutine для отправки значения в канал.
## Когда мы запускаем программу, сообщение "ping"
## успешно передается из одной goroutine в другую
## через наш канал.
$ go run channels.go
ping

## По умолчанию отправка и получение блокируются, пока
## и отправитель, и получатель не будут готовы. Эта
## особенность позволяет нам ожидать в конце нашей
## программы сообщения "ping" без использования других
## методов синхронизации.

Ниже представлен полный код:

// _Каналы_ - это трубы, которые соединяют конкурентные
// goroutine. Вы можете отправлять значения в каналы из
// одной goroutine и получать эти значения в другой
// goroutine.

package main

import "fmt"

func main() {

    // Создайте новый канал с использованием `make(chan val-type)`.
    // Каналы типизируются значениями, которые они передают.
    messages := make(chan string)

    // _Отправьте_ значение в канал с использованием
    // синтаксиса `channel <-`. Здесь мы отправляем "ping"
    // в канал `messages`, который мы создали выше, из
    // новой goroutine.
    go func() { messages <- "ping" }()

    // Синтаксис `<-channel` _получает_ значение из канала.
    // Здесь мы получим сообщение "ping", которое мы
    // отправили выше, и выведем его на экран.
    msg := <-messages
    fmt.Println(msg)
}

Резюме

Лаборатория Каналов проверяет вашу способность использовать каналы в Golang для передачи и приема значений между конкурентными goroutine. Завершив эту лабораторию, вы лучше поймете, как работают каналы и как их можно использовать для повышения производительности ваших программ на Golang.