Percorrer dados com para expressões
Outro fluxo de controle comum é um loop. Go usa apenas uma construção de looping, e isso é um for
loop. Mas você pode representar loops de mais de uma maneira. Nesta parte, você aprenderá sobre os padrões de loop suportados pelo Go.
Básico para sintaxe de loop
Como if
instruções e switch
instruções, for
as expressões de loop não exigem parênteses. Mas os aparelhos são obrigatórios.
Ponto e vírgula (;
) separam os três componentes dos for
laços:
- Uma instrução inicial que é executada antes da primeira iteração (opcional).
- Uma expressão de condição que é avaliada antes de cada iteração. O loop para quando esta condição é
false
. - Uma poststatement que é executada no final de cada iteração (opcional).
Como você pode ver, o for
loop no Go é semelhante ao for
loop em linguagens de programação como C, Java e C#.
Em sua forma mais simples, um for
loop em Go se parece com isto:
func main() {
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
fmt.Println("sum of 1..100 is", sum)
}
Vamos ver como você pode escrever loops em Go.
Pré-declarações e pós-declarações vazias
Em algumas linguagens de programação, você usa a while
palavra-chave para escrever padrões de loop onde apenas a expressão de condição é necessária. Go não while
tem palavra-chave. Mas você pode usar um for
loop em vez disso e aproveitar o fato de que Go torna as pré-declarações e pós-declarações opcionais.
Use o trecho de código a seguir para confirmar que você pode usar o for
loop sem usar preinstruções e poststatements.
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
var num int64
rand.Seed(time.Now().Unix())
for num != 5 {
num = rand.Int63n(15)
fmt.Println(num)
}
}
Desde que a num
variável mantenha um valor diferente de 5
, o programa imprime um número aleatório.
Loops infinitos e instruções de quebra
Outro padrão de loop que você pode escrever em Go é o loop infinito. Nesse caso, você não escreve uma expressão de condição ou uma pré-declaração ou pós-declaração. Em vez disso, você escreve o seu caminho fora do circuito. Caso contrário, a lógica nunca sai. Para fazer com que a lógica saia de um loop, use a break
palavra-chave.
Para escrever um loop infinito adequado, siga a for
palavra-chave com chaves, assim:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
var num int32
sec := time.Now().Unix()
rand.Seed(sec)
for {
fmt.Print("Writing inside the loop...")
if num = rand.Int31n(10); num == 5 {
fmt.Println("finish!")
break
}
fmt.Println(num)
}
}
Cada vez que você executa esse código, você obtém uma saída diferente.
Continuar declarações
Em Go, você pode usar a continue
palavra-chave para ignorar a iteração atual de um loop. Você pode usar essa palavra-chave, por exemplo, para executar uma validação antes que o loop continue. Ou use-o quando estiver escrevendo um loop infinito e precisar esperar que um recurso fique disponível.
Este exemplo usa a continue
palavra-chave:
package main
import "fmt"
func main() {
sum := 0
for num := 1; num <= 100; num++ {
if num%5 == 0 {
continue
}
sum += num
}
fmt.Println("The sum of 1 to 100, but excluding numbers divisible by 5, is", sum)
}
Este exemplo tem um loop for que itera de 1 a 100, adicionando o número atual à soma em cada iteração. Cada número divisível por 5 é ignorado na iteração atual do loop e não adicionado à soma.