https://github.com/golang/vscode-go
Es muy importante guardar los valores originales de las funciones que estamos utilizando para realizar nuestros test en caso de que en test posteriores decidamos evaluar otras partes del código que también dependen de esas funciones.
Go utiliza dos tipos de canales para las comunicaciones, los unbuffered channels son aquellos que tienen una cola de longitud 0, es decir, se utilizan para comunicación síncrona.
//Creating de Buffered channel with size = 3 c := make(chan int, 3)
//Sending the message c <- 1
// Is waiting the message. fmt.Println(<-c)
fatal error: all goroutines are asleep - deadlock!
Hay alternativas a los canales. No necesariamente puedes manejar tus Go Routines utilizando canales, hay otro mecanismo que sera muy simple muy intuitivo de entender que nos permitira lograr el mismo efecto que con los canales.
import ( "sync" )
var wg sync.WaitGroup wg.Add() wg.Done()
Cada vez que lanzamos una subrutina nueva, le agregamos 1 al contador y cada vez que termina la restamos 1. go doSomething(i, &wg)
Esto se va a pasar como copia si yo no lo envio como referencia.
Cuando se trabaja con GoRoutines no siempre se planea que estas envíen datos a través de channels entre unas y otras, en estos casos se puede utilizar un Wait Group Para alcanzar ese bloqueo de rutinas que es necesario.