Introducción
En Go, los structs son una forma de agrupar datos relacionados bajo un mismo nombre. Son similares a las clases en otros lenguajes de programación, pero sin métodos. Los structs permiten definir tipos de datos complejos que pueden contener múltiples campos de diferentes tipos.
Definición de Structs
Para definir un struct, utilizamos la palabra clave type seguida del nombre del struct y la palabra clave struct. Aquí hay un ejemplo básico:
package main
import "fmt"
// Definición de un struct llamado Persona
type Persona struct {
Nombre string
Edad int
}
func main() {
// Creación de una instancia del struct Persona
p := Persona{
Nombre: "Juan",
Edad: 30,
}
// Acceso a los campos del struct
fmt.Println("Nombre:", p.Nombre)
fmt.Println("Edad:", p.Edad)
}Explicación del Código
-
Definición del Struct:
type Persona struct { Nombre string Edad int }Aquí definimos un nuevo tipo llamado
Personaque tiene dos campos:Nombrede tipostringyEdadde tipoint. -
Creación de una Instancia:
p := Persona{ Nombre: "Juan", Edad: 30, }Creamos una instancia del
structPersonay asignamos valores a sus campos. -
Acceso a los Campos:
fmt.Println("Nombre:", p.Nombre) fmt.Println("Edad:", p.Edad)Accedemos a los campos del
structutilizando la notación de punto (.).
Inicialización de Structs
Hay varias formas de inicializar un struct en Go:
Inicialización Literal
Como se mostró en el ejemplo anterior, podemos inicializar un struct utilizando una lista de valores:
Inicialización con Valores por Defecto
Podemos crear una instancia de un struct sin inicializar sus campos. En este caso, los campos tendrán sus valores por defecto (cero para números, cadena vacía para strings, etc.):
Inicialización con Nombres de Campos
Podemos inicializar solo algunos campos del struct:
p := Persona{
Nombre: "Juan",
}
fmt.Println("Nombre:", p.Nombre) // "Juan"
fmt.Println("Edad:", p.Edad) // 0Métodos en Structs
Aunque los structs en Go no tienen métodos como las clases en otros lenguajes, podemos definir funciones que actúan sobre ellos. Estas funciones se llaman métodos y se definen asociándolas a un tipo de struct.
Definición de Métodos
Aquí hay un ejemplo de cómo definir un método para un struct:
package main
import "fmt"
type Persona struct {
Nombre string
Edad int
}
// Método para el struct Persona
func (p Persona) Saludar() {
fmt.Printf("Hola, mi nombre es %s y tengo %d años.\n", p.Nombre, p.Edad)
}
func main() {
p := Persona{
Nombre: "Juan",
Edad: 30,
}
p.Saludar()
}Explicación del Código
-
Definición del Método:
func (p Persona) Saludar() { fmt.Printf("Hola, mi nombre es %s y tengo %d años.\n", p.Nombre, p.Edad) }Definimos un método llamado
Saludarpara elstructPersona. El método tiene un receptor (p Persona) que es una instancia delstruct. -
Llamada al Método:
p.Saludar()Llamamos al método
Saludaren la instanciapdelstructPersona.
Ejercicios Prácticos
Ejercicio 1: Definir y Usar un Struct
Instrucciones:
- Define un
structllamadoLibrocon los camposTitulo(string),Autor(string) yPaginas(int). - Crea una instancia del
structLibroy asigna valores a sus campos. - Imprime los valores de los campos del
struct.
Solución:
package main
import "fmt"
type Libro struct {
Titulo string
Autor string
Paginas int
}
func main() {
libro := Libro{
Titulo: "El Quijote",
Autor: "Miguel de Cervantes",
Paginas: 1072,
}
fmt.Println("Titulo:", libro.Titulo)
fmt.Println("Autor:", libro.Autor)
fmt.Println("Paginas:", libro.Paginas)
}Ejercicio 2: Métodos en Structs
Instrucciones:
- Añade un método al
structLibrollamadoDescripcionque imprima una descripción del libro. - Llama al método
Descripcionen una instancia delstructLibro.
Solución:
package main
import "fmt"
type Libro struct {
Titulo string
Autor string
Paginas int
}
// Método para el struct Libro
func (l Libro) Descripcion() {
fmt.Printf("'%s' es un libro escrito por %s y tiene %d páginas.\n", l.Titulo, l.Autor, l.Paginas)
}
func main() {
libro := Libro{
Titulo: "El Quijote",
Autor: "Miguel de Cervantes",
Paginas: 1072,
}
libro.Descripcion()
}Conclusión
En esta sección, hemos aprendido sobre los structs en Go, cómo definirlos, inicializarlos y cómo agregar métodos a ellos. Los structs son una herramienta poderosa para crear tipos de datos complejos y organizar mejor nuestro código. En el próximo módulo, exploraremos más estructuras de datos avanzadas como arreglos y slices.
Curso de Programación en Go
Módulo 1: Introducción a Go
- Introducción a Go
- Configuración del Entorno de Go
- Tu Primer Programa en Go
- Sintaxis y Estructura Básica
Módulo 2: Conceptos Básicos
Módulo 3: Estructuras de Datos Avanzadas
Módulo 4: Manejo de Errores
Módulo 5: Concurrencia
Módulo 6: Temas Avanzados
Módulo 7: Desarrollo Web con Go
Módulo 8: Trabajando con Bases de Datos
Módulo 9: Despliegue y Mantenimiento
- Construcción y Despliegue de Aplicaciones Go
- Registro de Logs
- Monitoreo y Optimización de Rendimiento
- Mejores Prácticas de Seguridad
