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
Persona
que tiene dos campos:Nombre
de tipostring
yEdad
de tipoint
. -
Creación de una Instancia:
p := Persona{ Nombre: "Juan", Edad: 30, }
Creamos una instancia del
struct
Persona
y asignamos valores a sus campos. -
Acceso a los Campos:
fmt.Println("Nombre:", p.Nombre) fmt.Println("Edad:", p.Edad)
Accedemos a los campos del
struct
utilizando 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) // 0
Mé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
Saludar
para elstruct
Persona
. El método tiene un receptor (p Persona
) que es una instancia delstruct
. -
Llamada al Método:
p.Saludar()
Llamamos al método
Saludar
en la instanciap
delstruct
Persona
.
Ejercicios Prácticos
Ejercicio 1: Definir y Usar un Struct
Instrucciones:
- Define un
struct
llamadoLibro
con los camposTitulo
(string),Autor
(string) yPaginas
(int). - Crea una instancia del
struct
Libro
y 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
struct
Libro
llamadoDescripcion
que imprima una descripción del libro. - Llama al método
Descripcion
en una instancia delstruct
Libro
.
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