Looking for go Answers? Try Ask4KnowledgeBase
Looking for go Keywords? Try Ask4Keywords

GoLos canales


Introducción

Un canal contiene valores de un tipo dado. Los valores se pueden escribir en un canal y leer desde él, y circulan dentro del canal en orden de primero en entrar, primero en salir. Hay una distinción entre los canales almacenados en búfer, que pueden contener varios mensajes, y los canales no almacenados, que no pueden. Los canales se usan normalmente para comunicarse entre goroutines, pero también son útiles en otras circunstancias.

Sintaxis

  • make (chan int) // crea un canal sin búfer
  • make (chan int, 5) // crea un canal con buffer con una capacidad de 5
  • cerrar (ch) // cierra un canal "ch"
  • ch <- 1 // escribe el valor de 1 en un canal "ch"
  • val: = <-ch // lee un valor del canal "ch"
  • val, ok: = <-ch // sintaxis alternativa; ok es un bool que indica si el canal está cerrado

Observaciones

Un canal que contiene la estructura vacía make(chan struct{}) es un mensaje claro para el usuario de que no se transmite información a través del canal y que se utiliza exclusivamente para la sincronización.

Con respecto a los canales no almacenados, la escritura de un canal se bloqueará hasta que se produzca la lectura correspondiente de otro goroutine. Lo mismo es cierto para un bloqueo de lectura de canal mientras se espera un escritor.

Los canales Ejemplos relacionados