As várias formas de fazer looping em Go

A maioria das linguagens que já trabalhei tem vários comandos para fazer looping, como por exemplo for, foreach, while, do..while e goto.

Já em Go, nós só temos o comando for, porém ele tem várias assinaturas, o que no final faz com que ele possa ter o comportamento equivalente a um for, foreach e while de outras linguagens.

Vamos começar pela forma mais básica, que é a mesma assinatura que outras linguagens utilizam.

for i := 0; i < 10; i++ {
    fmt.Println(i)
}

nomes := []string{Tiago, Lucas, Pedro, Luana, Dani}
for i := 0; i < len(nomes); i++ {
    fmt.Println(nomes[i])
}

Em outras linguagens podemos facilitar o segundo caso exemplificado acima utilizando o comando foreach para iterar o array. Em Go, para utilizar essa forma de iteração, tudo que precisamos fazer é mudar a assinatura do for como mostramos abaixo.

nomes := []string{Tiago, Lucas, Pedro, Luana, Dani}
for key, nome := range nomes {
    fmt.Printf(%s está na posição %i \n, nome, key)
}

A cada volta o comando range retorna a key e o value da posição do array que o looping está. Caso você queira somente o value, só precisamos mudar um pouquinho a assinatura.

nomes := []string{Tiago, Lucas, Pedro, Luana, Dani}
for _, nome := range nomes {
    fmt.Println(nome)
}

Fácil não?!

No exemplo abaixo, vou criar o controle da váriavel de looping fora da condição do for, fazendo com que o looping funcione como o comando while.

i := 0
for i < 20 {
    //... algum código
    if alguma_condicao {
        i++
    }
}

Por último, quando criamos um serviço que precisa ficar ouvindo alguma porta ou executando determinada tarefa de tempos em tempos, costumamos tirar proveito do looping infinito para que o serviço nunca morra.

Em outras linguagens essa missão seria resolvida com o famoso while true. Em Go podemos fazer da seguinte forma.

for {
    // seu código maravilindo aqui!!!!
}

Deixem suas dúvidas nos comentários.

Até a próxima!


Subscreva

Fique por dentro de tudo o que acontece no mundo Go.

Deixe uma resposta