Menu
Coddy logo textTech

Zero Values e Padrões

Parte da seção Programação Orientada a Objetos do Journey de GO da Coddy — lição 17 de 107.

Em Go, toda variável possui um valor zero — o valor padrão atribuído quando você declara uma variável sem inicialização explícita. Entender os valores zero é essencial para trabalhar com structs, pois campos não inicializados recebem automaticamente esses padrões.

Cada tipo possui seu próprio valor zero:

TipoValor Zero
int, float640
string"" (string vazia)
boolfalse
ponteiro, slice, mapnil

Quando você cria uma struct, qualquer campo que você não definir explicitamente recebe seu valor zero (zero value).

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (string vazia)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Isso também se aplica à inicialização parcial. Apenas os campos que você especificar recebem valores personalizados.

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

Valores zero tornam as structs imediatamente utilizáveis sem inicialização explícita. No entanto, tenha cuidado com tipos de referência como slices e maps — seu valor zero é nil, o que pode causar panics em tempo de execução se você tentar usá-los sem inicialização.

challenge icon

Desafio

Fácil

Vamos construir um sistema de perfil de jogador que demonstra como os valores zero (zero values) funcionam em Go. Você criará um perfil de jogo onde alguns campos são definidos explicitamente, enquanto outros dependem de seus valores padrão.

Você organizará seu código em dois arquivos:

  • player.go: Defina uma struct Player com os seguintes campos: Username (string), Level (int), Score (int), IsPremium (bool) e GuildName (string). Além disso, crie um método DisplayProfile que retorna uma string formatada exibindo todas as informações do jogador.
  • main.go: Leia um nome de usuário da entrada e crie um Player usando apenas inicialização parcial — defina apenas o campo Username. Em seguida, exiba o perfil completo para ver como o Go preenche os campos não definidos com seus valores zero.

A seguinte entrada será fornecida:

  • Linha 1: O nome de usuário do jogador

Seu método DisplayProfile deve retornar uma string exatamente neste formato:

Username: [Username]
Level: [Level]
Score: [Score]
Premium: [IsPremium]
Guild: [GuildName]

Por exemplo, se o nome de usuário for ShadowKnight, sua saída deve mostrar o nome de usuário junto com todos os valores zero para os campos não inicializados:

Username: ShadowKnight
Level: 0
Score: 0
Premium: false
Guild: 

Observe como o campo Guild não mostra nada após os dois pontos — esse é o valor zero da string vazia. Este desafio ajuda você a ver exatamente o que o Go atribui a cada tipo quando você não fornece um valor explícito.

Folha de consulta

Em Go, toda variável tem um valor zero — o valor padrão atribuído quando você declara uma variável sem inicialização explícita.

Cada tipo tem seu próprio valor zero:

TipoValor Zero
int, float640
string"" (string vazia)
boolfalse
ponteiro, slice, mapnil

Quando você cria uma struct, qualquer campo que você não definir explicitamente recebe seu valor zero:

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (string vazia)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Inicialização parcial — apenas os campos especificados recebem valores personalizados:

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

Valores zero tornam as structs imediatamente utilizáveis sem inicialização explícita. Tenha cuidado com tipos de referência como slices e maps — seu valor zero é nil, o que pode causar panics em tempo de execução se usados sem inicialização.

Experimente você mesmo

package main

import (
	"fmt"
)

func main() {
	// Leia o username da entrada
	var username string
	fmt.Scanln(&username)

	// TODO: Crie um Player usando inicialização parcial
	// Defina apenas o campo Username, deixe os outros campos usarem valores zero

	// TODO: Exiba o perfil do jogador usando o método DisplayProfile
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos