Executando verificação de segurança...
2

Golang! Canais assincronos e Go Routines! - Prática

Antes de irmos a prática de uma vez. Vou explicar resumidamente o que é um channel e como ele funciona com Golang.

Channels são uma forma de comunicação entre uma thread (Go routine) e outra, isto é, se você quer transitar valores e dados entre uma thread e outra, é essencial usar threads pois fornecem uma ótima semantica e entendimento para o código.

Vamos ao exemplo prático.

package main

import (
	"fmt"
	"time"
)

//criando uma função que recebe como parametro um channel de um inteiro
func routine(times chan int) {
	for i := range times { //iterando no valor que times recebe
		fmt.Printf("this function was executed %d times \n", i)
		time.Sleep(1 * time.Milliseconds) //aguardando milesegundos para cada iteração
	}
}

func main() {
	times := make(chan int) //criando um tipo channel de um inteiro.
	go routine(times) //para sinalizar ao compilador que queremos utilizar uma go routine, usamos go na frente da assinatura da função.

        //criando um loop onde "times <- i" indica que a cada iteração, o valor de **i**
        //é enviada para o canal times onde esta estabelecida no parametro da 
        //função routine que consome esses dados.
	for i := 0; i < 10000; i++ { 
		times <- i
	}
}

Bem simples né, esta é a forma com que a linguagem troca informações entre a thread principal e as Go routines, trouxe este exemplo simples para que consigam digerir tranquilamente a funcionalidade dos canais na teoria e na prática, no entanto, pretendo trazer mais conteúdos sobre quando devemos ou não utilizar go routines e channels, explicar sobre mutex (mutual exclusion), waitgroups e deadlocks. Se você gostou ou achou que faltou alguma coisa comente por favor! Isso me ajuda a melhorar e correr atras das correções. Obrigado pela atenção e até a próxima!

Carregando publicação patrocinada...