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!