AD

¿Ya dominas lo básico? Un curso estructurado de Go es la vía rápida para dar el salto.

Ver cursos de Go en Udemy

Enlace de afiliado. No te cuesta nada extra.

🐹Lecciones de Go
Lección 40 / 68

Copia superficial y copia profunda

En esta lección verás qué se copia de verdad al asignar y qué no.

En Go, asignar un struct copia todos sus campos. Pero si un campo es un slice, un map o un puntero, lo que se copia es la referencia, y ambas copias comparten el mismo dato.

El código de ejemplo copia una estructura y la modifica a través de la copia; el original también cambia.

Que los structs se copien por valor es distinto de Java o C#, donde los objetos siempre van por referencia. Aquí una función que recibe un struct trabaja sobre su propia copia, lo que evita modificaciones inesperadas — y por eso los métodos que sí deben modificar usan un receptor de puntero.

Para copiar de verdad un slice hace falta copy(destino, origen) o slices.Clone(); asignarlo sin más solo duplica la vista. Es una de las fuentes de error más difíciles de diagnosticar, porque el síntoma aparece lejos de la causa.

📖 Código de referencia
✍️ Tu código
Escribe tu código y pulsa «Ejecutar»

🧪 Este sitio no puede compilar ni ejecutar Go directamente, así que comprueba al instante si lo que escribiste coincide con el código de referencia (la corrección ocurre por completo en tu navegador; no se envía nada a ningún servidor).

🔗 El mismo tema en otros lenguajes

Mira cómo se escribe lo mismo en otro lenguaje.

Espacio publicitario (banner)
Espacio publicitario (en el artículo)