0Pricing
Go Academy · Lección

Definición y uso de structs

Literales de struct, acceso a campos e incrustación

Definición y uso de structs es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

¿Qué es un struct?

Un struct agrupa campos relacionados de distintos tipos bajo un único tipo con nombre. Es el mecanismo principal de Go para definir estructuras de datos personalizadas, similar a una clase, pero sin herencia.

Declaración de un struct

Defina un tipo struct con la palabra clave type:

package main
import "fmt"

type Person struct {
    Name string
    Age  int
    City string
}

func main() {
    p := Person{Name: "Alice", Age: 30, City: "London"}
    fmt.Println(p)
}

Literales de struct

Hay dos estilos: con campos con nombre (preferido) y posicional (depende del orden y es frágil):

package main

type Point struct{ X, Y int }

func main() {
    p1 := Point{X: 1, Y: 2} // named — preferred
    p2 := Point{3, 4}        // positional — avoid in non-test code
    _ = p1; _ = p2
}

Acceso a los campos

Use la notación de punto para leer y escribir campos:

package main
import "fmt"

type Car struct{ Brand string; Speed int }

func main() {
    c := Car{Brand: "Tesla", Speed: 200}
    fmt.Println(c.Brand)  // Tesla
    c.Speed = 250
    fmt.Println(c.Speed)  // 250
}

Valor cero de un struct

El valor cero de un struct establece todos sus campos en sus respectivos valores cero. Puede usarlo de forma segura sin inicializarlo:

package main
import "fmt"

type Config struct{ Debug bool; Port int; Host string }

func main() {
    var cfg Config
    fmt.Println(cfg) // {false 0 }
    cfg.Port = 8080
    fmt.Println(cfg) // {false 8080 }
}

Comparación de structs

Los structs se pueden comparar con == si todos sus campos son comparables:

package main
import "fmt"

type Point struct{ X, Y int }

func main() {
    a := Point{1, 2}
    b := Point{1, 2}
    c := Point{3, 4}
    fmt.Println(a == b) // true
    fmt.Println(a == c) // false
}

Los structs son tipos por valor

Asignar un struct copia todos sus campos. Los cambios realizados en la copia no afectan al original:

package main
import "fmt"

type Rect struct{ W, H int }

func main() {
    r1 := Rect{10, 20}
    r2 := r1
    r2.W = 99
    fmt.Println(r1) // {10 20}
    fmt.Println(r2) // {99 20}
}

Structs anidados

Un campo de un struct puede ser a su vez otro struct:

package main
import "fmt"

type Address struct{ City, Country string }
type Employee struct {
    Name    string
    Age     int
    Address Address
}

func main() {
    e := Employee{Name: "Bob", Age: 28, Address: Address{"Berlin", "DE"}}
    fmt.Println(e.Address.City) // Berlin
}

Campos exportados y no exportados

Los campos que comienzan con una letra mayúscula están exportados (son públicos). Los campos en minúscula no están exportados (son privados del paquete):

package main

type config struct {
    host string // unexported
    Port int    // exported
}

func main() {
    c := config{host: "localhost", Port: 8080}
    _ = c
}

Etiquetas de struct

Las etiquetas de struct proporcionan metadatos (por ejemplo, para la codificación JSON). Son literales de tipo string situados después del tipo del campo:

package main

type User struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email,omitempty"`
}

func main() { _ = User{} }

Comprobación rápida

¿Cuál es el valor cero de un campo bool en un struct?

Recapitulación: structs

Conclusiones principales:

  • Los structs agrupan campos relacionados en un tipo con nombre
  • Use literales con campos con nombre; evite los posicionales
  • Los structs son tipos por valor; las asignaciones crean copias
  • Los campos que comienzan con mayúscula están exportados
  • Las etiquetas de struct añaden metadatos para bibliotecas como encoding/json

Ejercicio práctico

Defina un struct Product con los campos Name string, Price float64 e InStock bool. Cree dos instancias, compárelas con == y muestre el resultado.

Preguntas frecuentes

¿La lección «Definición y uso de structs» es gratis?

Sí — el texto completo de «Definición y uso de structs» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Definición y uso de structs»?

Literales de struct, acceso a campos e incrustación Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Definición y uso de structs»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Definición y uso de structs
  2. Métodos en structs
  3. Patrones de constructores
  4. Structs anónimos y composición
← Volver a Go Academy