Aula 12 - Tutorial Golang - Range

Página principal do blog

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no Facebook

Esse é o link do código fluente no Pinterest

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Melhore seu NETWORKING

https://digitalinnovation.one/

Participe de comunidades de desenvolvedores:

Fiquem a vontade para me adicionar ao linkedin.

E também para me seguir no https://github.com/toticavalcanti.

Código final da aula:

https://github.com/toticavalcanti

Toti:

https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA

Backing track / Play-along:

https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA

Código Fluente

https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w

Putz!

https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw

Aula 12 - Tutorial Golang - Range

Range

Range (intervalo) itera sobre elementos em uma variedade de estruturas de dados. Vamos ver como usar o range com algumas das estruturas de dados que já aprendemos.

Range em Array e Slice

Vamos começar usando Range para somar os números em um Slice. Slices são arrays dinâmicos que podem aumentar ou diminuir de tamanho conforme for necessário. OBS. O código abaixo funciona tanto para slice como para array. 

nums := []int{2, 3, 4}
sum := 0
for _, num := range nums {
    sum += num
}
fmt.Println("sum:", sum)

Saída:

sum: 9 

O compilador Go não permite que você crie variáveis que você nunca usa.

for i, value := range x {
   total += value
}
O código acima retornará uma mensagem de erro "i declarado e não usado". Como não usamos i dentro de nosso loop, precisamos alterá-lo para:

for _, value := range x {
   total += value
}
Nesse caso não dará erro, porque o i está sendo usado dentro do for, no println().

for i, num := range nums {
    if num == 3 {
        fmt.Println("index:", i)
    }
}

Saída:

index: 1 

O range em arrays e slices fornece o índice e o valor de cada entrada. Então, quando não precisamos do índice, o ignoramos com o identificador em branco _.

Range em Maps

Range em Maps itera sobre pares de chave / valor.

kvs := map[string]string{"a": "apple", "b": "banana"}
for k, v := range kvs {
    fmt.Printf("%s -> %s\n", k, v)
}

Saída:

a -> apple b -> banana 

Range também pode iterar apenas sobre as keys de um map.

for k := range kvs {
    fmt.Println("key:", k)
}

Saída:

key: a key: b 

Range em Strings

Range em strings itera sobre pontos de código Unicode. O primeiro valor é o índice de bytes inicial da runa e o segundo a própria runa. Literais de runa são apenas valores inteiros de 32 bits, que representam pontos de código Unicode. Por exemplo, o literal rúnico 'a' é na verdade o número 97.

for i, c := range "go" {
    fmt.Println(i, c)
}

Saída:

0 103 1 111 

Código completo


package main

import "fmt"

func main() {

    nums := []int{2, 3, 4}
    sum := 0
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)

    for i, num := range nums {
        if num == 3 {
            fmt.Println("index:", i)
        }
    }

    kvs := map[string]string{"a": "apple", "b": "banana"}
    for k, v := range kvs {
        fmt.Printf("%s -> %s\n", k, v)
    }

    for k := range kvs {
        fmt.Println("key:", k)
    }

    for i, c := range "go" {
        fmt.Println(i, c)
    }
}
 

E pra executar é só entrar na pasta onde tá o arquivo range.go e digitar:

go run range.go

É isso pessoal, fico por aqui.

Página principal do blog

página do Código Fluente no Facebook

Esse é o link do código fluente no Pinterest

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado e bons estudos. ;)