Um gourotine pode ser entendida como uma rotina ou função executada em uma thread ou um 
                pequeno processo que é executado de forma simultânea. Podemos 
                executar N goroutines de forma assíncrona com uso da palavra reservada go.
            
            Sintaxe 1: função
            
go nome_funcao(<lista_parametros>)
            Sintaxe 2: função anônima
            
go func( <lista_parametros> ){
 //...
}(<lista_argumentos>)
            
                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, 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.