Principais tipos de for no Go

Uma das principais estruturas de controle no Go é o for. É importante ressaltar que o go não possui as estruturas while e foreach, por isso utilizar o for da maneira correta é tão importante.

Outro dia pesquisando encontrei um artigo muito bacana com exemplos de como aplicar o for de cinco maneiras diferentes e resolvi compartilhar aqui. O link para o artigo original está no final do post.

For básico com três componentes.

total := 0
for i := 1; i < 5; i++ {
	fmt.Print(total, " + ", i, " = ")
	total += i
	fmt.Println(total)
}
fmt.Println("Valor da soma:", total)

Output
0 + 1 = 1
1 + 2 = 3
3 + 3 = 6
6 + 4 = 10
Valor da soma: 10

No exemplo acima, declaramos o total com valor inicial 0 e i 1 e somamos o valor de i com o total.
Exibimos as informações durante a execução para demonstrar o funcionamento de cada etapa do processo.

For substituindo While

total := 0
for total < 5 {
	fmt.Print(total, " + ", 1, " = ")
	total += 1
	fmt.Println(total)
}
fmt.Println("Valor da soma:", total)

Output
0 + 0 = 1
1 + 1 = 2
2 + 2 = 3
3 + 3 = 4
4 + 4 = 5
Valor da soma: 5

No exemplo acima utilizamos somente o total e é somado 1 a cada iteração.

Loop infinito (while true)

total := 0
for {
	fmt.Print(total, " + ", 1, " = ")
	total++
	fmt.Println(total)
}

Output
0 + 1 = 1
1 + 1 = 2
2 + 1 = 3
3 + 1 = 4
4 + 1 = 5
5 + 1 = 6
6 + 1 = 7
7 + 1 = 8
8 + 1 = 9
9 + 1 = 10
….

Loops infinitos são úteis quando estamos desenvolvendo um programa que precisa manter a execução. Por exemplo, um servidor que precisa escutar uma porta constantemente. No exemplo, declaramos o valor inicial do total 0 e somamos um a cada iteração.
O programa executará a soma infinitamente ou até a execução for interrompida manualmente.

For-each range loop

frutas := []string{"Laranja", "Banana", "Maçã", "Limão"}
for i, s := range frutas {
	fmt.Println("Posição", i, " - Valor", s)
}

Output
Posição 0 – Valor Laranja
Posição 1 – Valor Banana
Posição 2 – Valor Maçã
Posição 3 – Valor Limão

Para percorrer arrays, ou slices no Go, utilizamos o range. Aqui definimos um slice de arrays com uma lista de frutas e atribuímos as variáveis i para o índice e s para o valor que está sendo acessado na iteração.

Loop com interrupção (continue

total := 0
for i := 1; i < 5; i++ {
	if i%2 != 0 {
		continue
	}
	fmt.Print(total, " + ", i, " = ")
	total += i
	fmt.Println(total)

}
fmt.Println("Valor da soma:", total)

Output
0 + 2 = 2
2 + 4 = 6
Valor da soma: 6

No exemplo acima definimos o total com o valor 0 e fazemos um loop de 1 a 5. Caso o valor de i seja par ele realiza a soma de i e o total, senão continua o loop sem somar.

Loop com interrupção (break)

total := 0
for i := 1; i < 5; i++ {
	if total == 6 {
		break
	}
	fmt.Print(total, " + ", i, " = ")
	total += i
	fmt.Println(total)

}
fmt.Println("Valor da soma:", total)

Output
0 + 1 = 1
1 + 2 = 3
3 + 3 = 6
Valor da soma: 6

Este exemplo é similar ao anterior, mas utilizamos o break para sair do loop quando o valor de total for igual a 6.

Referências:
https://yourbasic.org/golang/for-loop/