Menu
Coddy logo textTech

Valores Zero 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 tem um valor zero: o valor padrão atribuído quando você declara uma variável sem inicialização explícita. Compreender os valores zero é essencial para trabalhar com structs, pois os campos não inicializados recebem automaticamente esses valores padrão.

Cada tipo tem seu próprio valor zero:

TipoValor zero
int, float640
string"" (string vazia)
boolfalse
pointer, slice, mapnil

Quando você cria uma struct, qualquer campo que 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
}

Isso também se aplica à inicialização parcial. Somente 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 initialization explícita. No entanto, tenha cuidado com tipos de referência, como slices e maps. O valor zero deles é nil, o que pode causar panics em tempo de execução se você tentar usá-los sem initialization.

challenge icon

Desafio

Fácil

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

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

  • player.go: Defina uma estrutura Player com os seguintes campos: Username (string), Level (int), Score (int), IsPremium (bool) e GuildName (string). Crie também um método DisplayProfile que retorne uma string formatada mostrando todas as informações do jogador.
  • main.go: Leia um nome de usuário da entrada e crie um Player usando apenas uma inicialização parcial: defina somente o campo Username. Em seguida, exiba o perfil completo para ver como 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 neste formato exato:

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

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

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

Observe como o campo Guild não mostra nada depois dos dois-pontos: essa é a representação do valor zero de uma string vazia. Este desafio ajuda você a ver exatamente o que Go atribui a cada tipo quando você não fornece um valor explícito.

Experimente você mesmo

package main

import (
	"fmt"
)

func main() {
	// Leia o nome de usuário 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

Pratique por conta própria: Compilador de Go online