Concurrencia de Canales en Golang

GolangGolangBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

El laboratorio de canales está diseñado para probar su comprensión de los canales en Golang. Los canales se utilizan para conectar gorutinas concurrentes, permitiendo que se envíen y reciban valores entre ellas.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/ConcurrencyGroup(["Concurrency"]) go/ConcurrencyGroup -.-> go/channels("Channels") subgraph Lab Skills go/channels -.-> lab-15459{{"Concurrencia de Canales en Golang"}} end

Canales

En este laboratorio, se le pide que cree un nuevo canal y envíe un valor a través de él desde una nueva gorutina. Luego recibirá el valor del canal y lo imprimirá.

  • Debe utilizar la sintaxis make(chan val-type) para crear un nuevo canal.
  • El canal debe ser tipado por los valores que transporta.
  • Debe utilizar la sintaxis channel <- para enviar un valor al canal.
  • Debe utilizar la sintaxis <-channel para recibir un valor del canal.
  • Debe utilizar una nueva gorutina para enviar el valor al canal.
## Cuando ejecutamos el programa, el mensaje `"ping"` se
## pasa con éxito de una gorutina a otra a través de
## nuestro canal.
$ go run channels.go
ping

## Por defecto, los envíos y recepciones se bloquean hasta
## que tanto el emisor como el receptor estén listos. Esta
## propiedad nos permite esperar al final de nuestro
## programa el mensaje `"ping"` sin tener que utilizar ninguna
## otra sincronización.

A continuación está el código completo:

// Los _Canales_ son las tuberías que conectan gorutinas
// concurrentes. Puede enviar valores a través de canales
// desde una gorutina y recibir esos valores en otra
// gorutina.

package main

import "fmt"

func main() {

	// Crea un nuevo canal con `make(chan val-type)`.
	// Los canales son tipados por los valores que transportan.
	messages := make(chan string)

	// _Envía_ un valor a un canal utilizando la sintaxis
	// `channel <-`. Aquí enviamos `"ping"` al canal
	// `messages` que creamos anteriormente, desde una nueva
	// gorutina.
	go func() { messages <- "ping" }()

	// La sintaxis `<-channel` _recibe_ un valor del canal.
	// Aquí recibiremos el mensaje `"ping"` que enviamos
	// anteriormente y lo imprimiremos.
	msg := <-messages
	fmt.Println(msg)
}

Resumen

El laboratorio de Canales prueba su capacidad para utilizar canales en Golang para enviar y recibir valores entre gorutinas concurrentes. Al completar este laboratorio, tendrá una mejor comprensión de cómo funcionan los canales y cómo se pueden utilizar para mejorar el rendimiento de sus programas de Golang.