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
- Definición y uso de structs
- Métodos en structs
- Patrones de constructores
- Structs anónimos y composición