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 inicialización explícita. Comprender los valores cero es esencial para trabajar con estructuras, 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 una estructura, cualquier campo que no establezcas explícitamente obtiene 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 especificas obtienen valores personalizados.

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

Los valores cero hacen que las estructuras se puedan usar de inmediato sin una inicialización explícita. Sin embargo, ten cuidado con los tipos de referencia como los slices y los maps. Su valor cero es nil, lo que puede causar pánicos en tiempo de ejecución si intentas usarlos sin inicialización.

challenge icon

Desafío

Fácil

Construyamos un sistema de perfil de jugador que demuestre cómo funcionan los valores cero en Go. Crearás un perfil de juego en el que algunos campos se establecen explícitamente, mientras que otros dependen de sus valores cero 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 con formato que muestre toda la información del jugador.
  • main.go: Lee un nombre de usuario de la entrada y crea un Player usando una inicialización parcial: establece únicamente el campo Username. Después, 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 con este formato exacto:

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

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

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

Observa que 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.

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 demás 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

Practica por tu cuenta: Compilador de Go online