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

  1. Definición del Struct:

    type Persona struct {
        Nombre string
        Edad   int
    }
    

    Aquí definimos un nuevo tipo llamado Persona que tiene dos campos: Nombre de tipo string y Edad de tipo int.

  2. Creación de una Instancia:

    p := Persona{
        Nombre: "Juan",
        Edad:   30,
    }
    

    Creamos una instancia del struct Persona y asignamos valores a sus campos.

  3. 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:

p := Persona{
    Nombre: "Juan",
    Edad:   30,
}

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.):

p := Persona{}
fmt.Println("Nombre:", p.Nombre) // ""
fmt.Println("Edad:", p.Edad)     // 0

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

  1. 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 el struct Persona. El método tiene un receptor (p Persona) que es una instancia del struct.

  2. Llamada al Método:

    p.Saludar()
    

    Llamamos al método Saludar en la instancia p del struct Persona.

Ejercicios Prácticos

Ejercicio 1: Definir y Usar un Struct

Instrucciones:

  1. Define un struct llamado Libro con los campos Titulo (string), Autor (string) y Paginas (int).
  2. Crea una instancia del struct Libro y asigna valores a sus campos.
  3. 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:

  1. Añade un método al struct Libro llamado Descripcion que imprima una descripción del libro.
  2. Llama al método Descripcion en una instancia del struct 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.

© Copyright 2024. Todos los derechos reservados