Declaración y uso de estructuras de datos en Go

Clase 19 de 29Curso de Go

Resumen

El lenguaje Go emplea estructuras de datos llamadas structs como equivalentes a las clases en otros lenguajes de programación. Estas estructuras permiten definir tipos personalizados con propiedades específicas y métodos asociados, haciendo posible trabajar de manera organizada y eficiente.

¿Qué son las estructuras de datos ó structs en Go?

En Go, una estructura de datos, conocidas comúnmente como struct, es un tipo de dato personalizado que facilita crear objetos que tienen propiedades específicas. Los structs son similares a las clases en programación orientada a objetos y permiten gestionar la información agrupadamente.

Para declarar un nuevo struct se utiliza la palabra reservada type, seguida del nombre de la estructura y la indicación struct. Por ejemplo:

type persona struct {
    nombre string
    edad   int
}

Estos atributos definen las propiedades del nuevo objeto "persona", permitiendo organizar de manera fácil los datos relacionados.

¿Cómo crear una función que retorne una estructura?

Cuando se trabaja con structs, es común escribir funciones que permitan crear instancias de estas estructuras de forma dinámica. Observa cómo una función puede regresar un objeto con la estructura recién definida:

func nuevaPersona(nombre string, edad int) *persona {
    nuevoIndividuo := persona{
        nombre: nombre,
        edad:   edad,
    }
    nuevoIndividuo.edad = 42 // Se manipula directamente la propiedad
    return &nuevoIndividuo
}

Esta función demuestra también cómo trabajar con punteros, retornando directamente la dirección de memoria del objeto creado, lo que mejora el rendimiento al evitar copias innecesarias.

¿De qué formas puedes declarar e inicializar structs?

En Go existen diferentes métodos para ingresar datos a un struct. Por ejemplo:

  • Declaración implícita:
fmt.Println(persona{"Marcela", 42})
  • Declaración explícita:
fmt.Println(persona{nombre: "Santiago", edad: 44})

En ambos casos, el resultado es el mismo, pero en Go también puedes omitir propiedades al declarar un objeto, asignándose un valor por defecto:

fmt.Println(persona{nombre: "Felipe"}) // edad será 0

¿Cómo actualizar propiedades específicas de un struct?

Los structs permiten modificar sus propiedades individualmente, tanto en la creación como posteriormente:

personita := persona{nombre: "Miranda", edad: 7}
personita.edad = 10 // Actualiza edad directamente

Esto facilita controlar los datos dentro del programa, actualizándolos según se necesite durante la ejecución del código.

¿Qué experiencia tienes trabajando con structs en Go? ¡Comparte tus opiniones y dudas en los comentarios!