РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
47 of 1593 menu

Тип chan

Тип chan в Go представляет канал для обмена данными между горутинами. Каналы позволяют передавать значения одного типа и обеспечивают синхронизацию при работе с параллельным кодом. Первым параметром объявления канала идет тип данных, которые будут передаваться, а вторым - направление передачи (если требуется).

Синтаксис

var ch chan int ch = make(chan int) ch := make(chan string) ch := make(chan bool, 10)

Создание и использование канала

Создадим канал для передачи целых чисел и отправим в него значение:

package main import "fmt" func main() { ch := make(chan int) go func() { ch <- 42 }() res := <-ch fmt.Println(res) }

Результат выполнения кода:

42

Буферизированный канал

Создадим буферизированный канал с емкостью 2:

package main import "fmt" func main() { ch := make(chan string, 2) ch <- "abcde" ch <- "12345" res1 := <-ch res2 := <-ch fmt.Println(res1) fmt.Println(res2) }

Результат выполнения кода:

"abcde" "12345"

Закрытие канала

Закроем канал и проверим, закрыт ли он:

package main import "fmt" func main() { ch := make(chan int) go func() { ch <- 10 ch <- 20 close(ch) }() for res := range ch { fmt.Println(res) } }

Результат выполнения кода:

10 20

Канал только для чтения

Создадим канал только для чтения данных:

package main import "fmt" func main() { ch := make(chan string) ch <- "abcde" var readOnly <-chan string = ch res := <-readOnly fmt.Println(res) }

Результат выполнения кода:

"abcde"

Канал только для записи

Создадим канал только для записи данных:

package main import "fmt" func main() { ch := make(chan string) var writeOnly chan<- string = ch writeOnly <- "12345" res := <-ch fmt.Println(res) }

Результат выполнения кода:

"12345"

Смотрите также

  • функцию make,
    которая создает каналы
  • тип slice,
    который является динамическим массивом
  • тип map,
    который представляет коллекцию ключ-значение
  • тип pointer,
    который хранит адрес переменной
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить