Structs
1. Composición en Structs
En Go, no hay herencia como en otros lenguajes, pero podemos usar la composición para reutilizar código. Un struct puede "incluir" otros structs para compartir sus campos y métodos.
En este ejemplo, Empleado
incluye los campos de Persona
, lo que permite acceder a los campos nombre
y edad
directamente a través de una instancia de Empleado
.
2. Métodos en Structs
Ya hemos visto cómo asociar métodos a structs, pero aquí va otro ejemplo para afianzar el concepto:
3. Anidación de Structs
Un struct puede contener otros structs como campos, lo que facilita la organización de datos complejos.
Preguntas para practicar:
¿Cuál es la ventaja de usar composición en lugar de herencia en Go?
¿Cómo accederías a los campos de un struct anidado?
¿Qué diferencia existe entre declarar un método con un receptor por valor y uno por puntero?
Respuestas mias:
La ventaja es que como no podemos usar herencia en go podemos usar la composicion que lo que nos permite es reutilizar codigo lo cual es una ventaja a nivel de optimizacion y uso de recursos a diferencia de herencia.
Accedería asi:
Que con un receiver por valor no estariamos accediendo a un struct original sino la copia de ese struct mientras que con un receiver por puntero accedemos al valor original en su lugar, optimizando recursos y accediendo al valor original.
Respuestas Chatgpt →
Composición vs Herencia: En Go, la composición permite reutilizar código de manera más flexible, promoviendo una estructura de código más simple y menos dependiente. Además, evita algunos problemas clásicos de la herencia, como la "herencia frágil", donde los cambios en la clase base pueden afectar negativamente a las clases derivadas.
Acceso a struct anidado: Así es, accedes a los campos de la estructura anidada usando una jerarquía de puntos, como lo hiciste correctamente:
variableEjemplo.estructuraAnidada.Nombre
.Receiver por valor vs por puntero: Exacto, el uso de un receiver por valor crea una copia del struct, mientras que el uso de un puntero permite modificar el struct original sin crear copias innecesarias, lo que optimiza la memoria y el rendimiento.
¿Cual es la diferencia entre Composición y Anidación en Go?
Composición: Se refiere a incluir un struct dentro de otro como un campo. Esto permite que el struct contenedor "herede" los campos y métodos del struct incluido, estableciendo una relación "tiene un" (has-a). Facilita la reutilización y la creación de estructuras más complejas.
Anidación: Implica definir un struct dentro de otro struct, organizando datos relacionados en una jerarquía. Esto permite agrupar información lógica y mejora la claridad del modelo de datos.
Last updated