Um gourotine pode ser entendida como uma rotina ou função executada em uma thread. Podemos executar N goroutines de forma assíncrona com uso da palavra reservada go.

Sintaxe 1: função
go nome_funcao(parametros)
Sintaxe 2: função anônima
go func(parametros){
 //corpo
}(parametros)

No exemplo abaixo, temos uma função, goroutine anônima e uma goroutine sendo invocadas nesta ordem. A saída desse exemplo pode variar.

Exemplo 1
package main

import (
	"fmt"
	"time"
)

func imprimir(str string) {
	for idx := 0; idx < 5; idx++ {
		fmt.Printf("%s: %d\n", str, idx)
                       //time.Sleep(time.Second)
	}
}
func main() {

	go func(str string) {
		for idx := 0; idx < 5; idx++ {
			fmt.Printf("%s: %d\n", str, idx)
		}
	}("go")

	go imprimir("routines")
	imprimir("lang")
	time.Sleep(time.Second)
	fmt.Println("ok")
}
Saída
lang: 0
lang: 1
lang: 2
lang: 3
lang: 4
go: 0
routines: 0
routines: 1
routines: 2
routines: 3
routines: 4
go: 1
go: 2
go: 3
go: 4
ok

Como pode ser observado na saída do exemplo acima, a função imprimir invocada após a função anônima é executada primeiro, seguida da goroutine anônima que é interrompida após a impressão do índice 0 para a execução da goroutine imprimir, que após seu término, a goroutine anônima tem sua execução concluída.

  1. 14/05/2025 - versão inicial