Percorrer dados com para expressões

Concluído

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.