El uso de Make en channels, slices, maps
En Go, la palabra clave make
se utiliza para inicializar ciertos tipos de colecciones como slices, maps y channels porque estos tipos de datos requieren una asignación y configuración especiales de memoria que no pueden realizarse simplemente con una declaración directa.
Aquí te explico por qué make
es la regla de oro para estos tipos:
1. Slices:
Los slices en Go son una estructura más compleja que un array simple. Internamente, un slice tiene un puntero a un array subyacente, una longitud y una capacidad. Usar make
garantiza que se asigne memoria tanto para el array subyacente como para el slice en sí, y que se inicialicen correctamente la longitud y capacidad.
Ejemplo:
2. Maps:
Un map
es un tipo de colección asociativa en Go que almacena pares clave-valor. Para que funcione correctamente, necesita ser inicializado con make
, lo que asegura que la estructura de datos interna del map
esté preparada para almacenar y buscar elementos.
Ejemplo:
3. Channels:
Los channels
son estructuras de comunicación entre goroutines y requieren make
para inicializar los buffers internos y configurar adecuadamente el canal para que funcione.
Ejemplo:
¿Por qué no se usa new
?
new
?La palabra clave new
en Go solo asigna memoria para un tipo y devuelve un puntero a esa memoria, pero no inicializa estructuras complejas como lo hace make
. Por ejemplo, puedes usar new
para asignar un entero, pero no para un map
, slice
o channel
, ya que estos requieren inicializaciones adicionales.
Regla de oro:
Se debe usar make
siempre con slices, maps y channels porque asegura que estos tipos sean correctamente inicializados y listos para su uso, mientras que simplemente declarar la variable (sin make
) dejaría la estructura en su valor cero (nil
), lo cual no es funcional y causaría un panic al intentar usarlos sin inicializarlos.
Last updated