Menu
Coddy logo textTech

Inicialización de structs

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

Go proporciona varias formas de inicializar structs, cada una útil en diferentes situaciones.

Inicialización de campos con nombre

type Person struct {
    Name string
    Age  int
    City string
}

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

Inicialización posicional (el orden debe coincidir con la declaración de los campos)

p2 := Person{"Bob", 30, "London"}

Inicialización con valor cero (todos los campos obtienen valores por defecto)

p3 := Person{}
// Name: "", Age: 0, City: ""

Inicialización parcial (los campos no establecidos obtienen valores cero)

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

Puntero a una estructura usando &

p5 := &Person{
    Name: "Diana",
    Age:  28,
    City: "Paris",
}
fmt.Println(p5.Name) // Diana

Usando var y luego asignando campos

var p6 Person
p6.Name = "Eve"
p6.Age = 22

La inicialización de campos con nombre es el enfoque más común y legible. Utilice & cuando necesite un puntero a la estructura.

challenge icon

Desafío

Intermedio

Crea tres objetos Player utilizando diferentes métodos de inicialización:

  • player1: Inicialización de campos con nombre utilizando los valores de entrada
  • player2: Inicialización de campos con nombre con Name: "Guest", Class: "Novice", HitPoints: 50
  • player3: Usa la declaración var y luego asigna cada campo individualmente

Hoja de referencia

Go proporciona varias formas de inicializar structs:

Inicialización de campos con nombre (la más común y legible):

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

Inicialización posicional (el orden debe coincidir con la declaración de los campos):

p2 := Person{"Bob", 30, "London"}

Inicialización con valor cero (todos los campos obtienen valores por defecto):

p3 := Person{}
// Name: "", Age: 0, City: ""

Inicialización parcial (los campos no establecidos obtienen valores cero):

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

Puntero a un struct usando &:

p5 := &Person{
    Name: "Diana",
    Age:  28,
}
fmt.Println(p5.Name) // Diana

Usando var y luego asignando campos:

var p6 Person
p6.Name = "Eve"
p6.Age = 22

Pruébalo tú mismo

package main

import "fmt"

func main() {
    var name, class string
    var hp int
    fmt.Scan(&name, &class, &hp)

    // TODO: Crear player1 usando la inicialización de campos con nombre con los valores de entrada

    // TODO: Crear player2 usando la inicialización de campos con nombre:
    // Name: "Guest", Class: "Novice", HitPoints: 50

    // TODO: Crear player3 usando la declaración var, luego asignar los campos:
    // Name: "Hero", Class: "Knight", HitPoints: 200

    fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
    fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
    fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}
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