Menu
Coddy logo textTech

Valores cero y por defecto

Parte de la sección Programación Orientada a Objetos del Journey de GO de Coddy — lección 17 de 107.

En Go, cada variable tiene un valor cero — el valor predeterminado asignado cuando declaras una variable sin una inicialización explícita. Comprender los valores cero es esencial para trabajar con structs, ya que los campos no inicializados reciben automáticamente estos valores predeterminados.

Cada tipo tiene su propio valor cero:

TipoValor cero
int, float640
string"" (cadena vacía)
boolfalse
pointer, slice, mapnil

Cuando creas un struct, cualquier campo que no establezcas explícitamente recibe su valor cero.

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (cadena vacía)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Esto también se aplica a la inicialización parcial. Solo los campos que especifiques obtienen valores personalizados.

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

Los valores cero hacen que las estructuras sean utilizables inmediatamente sin inicialización explícita. Sin embargo, tenga cuidado con los tipos de referencia como slices y maps; su valor cero es nil, lo que puede causar pánicos en tiempo de ejecución si intenta usarlos sin inicialización.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de perfil de jugador que demuestre cómo funcionan los valores cero (zero values) en Go. Crearás un perfil de juego donde algunos campos se establecen explícitamente mientras que otros dependen de sus valores predeterminados.

Organizarás tu código en dos archivos:

  • player.go: Define una estructura Player con los siguientes campos: Username (string), Level (int), Score (int), IsPremium (bool), y GuildName (string). También crea un método DisplayProfile que devuelva una cadena formateada mostrando toda la información del jugador.
  • main.go: Lee un nombre de usuario de la entrada y crea un Player usando solo inicialización parcial—establece solo el campo Username. Luego muestra el perfil completo para ver cómo Go rellena los campos no establecidos con sus valores cero.

Se proporcionará la siguiente entrada:

  • Línea 1: El nombre de usuario del jugador

Tu método DisplayProfile debe devolver una cadena en este formato exacto:

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

Por ejemplo, si el nombre de usuario es ShadowKnight, tu salida debería mostrar el nombre de usuario junto con todos los valores cero para los campos no inicializados:

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

Observa cómo el campo Guild no muestra nada después de los dos puntos—ese es el valor cero de una cadena vacía. Este desafío te ayuda a ver exactamente qué asigna Go a cada tipo cuando no proporcionas un valor explícito.

Hoja de referencia

En Go, cada variable tiene un valor cero (zero value) — el valor por defecto asignado cuando declaras una variable sin una inicialización explícita.

Cada tipo tiene su propio valor cero:

TipoValor Cero
int, float640
string"" (cadena vacía)
boolfalse
pointer, slice, mapnil

Cuando creas un struct, cualquier campo que no establezcas explícitamente recibe su valor cero:

type User struct {
    Name   string
    Age    int
    Active bool
}

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

Inicialización parcial — solo los campos especificados obtienen valores personalizados:

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

Los valores cero hacen que los structs sean utilizables inmediatamente sin una inicialización explícita. Ten cuidado con los tipos de referencia como slices y maps — su valor cero es nil, lo que puede causar pánicos en tiempo de ejecución (runtime panics) si se usan sin inicialización.

Pruébalo tú mismo

package main

import (
	"fmt"
)

func main() {
	// Lee el nombre de usuario desde la entrada
	var username string
	fmt.Scanln(&username)

	// TODO: Crea un Player usando inicialización parcial
	// Solo establece el campo Username, deja que los otros campos usen valores cero

	// TODO: Muestra el perfil del jugador usando el método DisplayProfile
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos