Da trilha de Go Este conceito ainda não saiu como card do dia. ir para o card de hoje

Go Fundamentos Básico

Variáveis e zero values

Em Go, toda variável declarada sem valor explícito recebe automaticamente seu zero value. Isso significa que não existem variáveis "indefinidas": int vira 0, string vira "", bool vira false, ponteiros e slices viram nil, e assim por diante. Esse comportamento torna o código previsível e evita erros comuns em outras linguagens.

Você pode declarar variáveis com var nome tipo ou, dentro de funções, usar a forma curta nome := valor. A forma curta infere o tipo e só pode ser usada dentro de funções. Já var pode ser usado em qualquer escopo, inclusive no nível do pacote.

O escopo de uma variável é o bloco onde ela foi declarada. Um bloco é delimitado por chaves {}. Se você declarar uma variável com o mesmo nome em um bloco interno, ocorre shadowing (sombreamento): a variável interna "esconde" a externa enquanto aquele bloco estiver em execução. Isso é útil, mas pode causar confusão se não for intencional.

Neste card, vamos explorar como declarar variáveis, quais são os zero values dos tipos básicos, como o escopo funciona na prática e como o shadowing pode afetar seu programa.

Pontos-chave

  • var x int declara x com zero value 0; y := 10 infere o tipo e inicializa.
  • Zero values: 0 para números, "" para string, false para bool, nil para ponteiros, slices, maps, channels e interfaces.
  • O escopo de uma variável é o bloco {} onde ela foi declarada.
  • Shadowing ocorre quando uma variável interna tem o mesmo nome de uma externa e a esconde dentro do bloco.
  • Use var para declarar sem inicializar ou no nível de pacote; use := para declarações curtas dentro de funções.
variaveis_zero.go
package main

import "fmt"

var global int // zero value: 0

func main() {
	// Declaração com var e zero value
	var a int
	var b string
	var c bool
	fmt.Println("zero values:", a, b, c) // 0 "" false

	// Declaração curta com inferência
	nome := "Go"
	idade := 15
	fmt.Println(nome, idade)

	// Escopo de bloco e shadowing
	x := 10
	fmt.Println("x externo:", x)
	{
		x := 20 // nova variável, sombreia a externa
		fmt.Println("x interno:", x)
	}
	fmt.Println("x externo novamente:", x)

	// Zero value de um ponteiro
	var p *int
	fmt.Println("ponteiro nil?", p == nil)
}

Exercícios

  1. 1
    Fácil

    Zero values na prática

    Declare três variáveis usando var sem inicializá-las: uma do tipo int, uma string e uma bool. Imprima cada uma e seus respectivos zero values.

    Resolver
  2. 2
    Médio

    Escopo e shadowing

    Crie um programa que declare uma variável x no escopo da função main com valor 10. Dentro de um bloco {}, declare outra variável x com valor 20 e imprima ambas. Depois do bloco, imprima novamente a variável externa para mostrar que ela não foi alterada.

    Resolver
  3. 3
    Desafio

    Zero values e escopo em uma função

    Escreva uma função contador que declare uma variável total com zero value (var total int). Dentro de um laço for de 1 a 3, some o valor de i a total e imprima o total parcial. Após o laço, imprima o total final. No main, chame a função e também declare uma variável total com valor 100 para demonstrar que o escopo da função não afeta o main.

    Resolver

Continue estudando