🥇 Uso de punteros en estructuras
🍿 Copia vs referencia dentro de estructuras
Es importante hacer notar que cuando se realiza una copia de una estructura a través de una igualdad, se realiza una copia completa de los valores de esta. Es decir.
🍿 Ejemplo de asignación por copia de una estructura en Go
package main
import "fmt"
type Pais struct {
Nombre string
}
func main() {
pais1 := Pais{Nombre: "Canada"}
pais2 := pais1
pais1.Nombre = "Inglaterra"
fmt.Printf("%+v\n", pais1)
fmt.Printf("%+v\n", pais2)
}
🍿 Descripción del ejemplo de asignación por copia de una estructura en Go
En la salida tendremos.
{Nombre:Inglaterra}
{Nombre:Canada}
- Como vemos,
pais2 := pais1
ha realizado una copia completa de pais1. - Si actualizamos
pais1
, en este caso con el nombre Inglaterrapais2
no se verá afectado.
🍿 Ejemplo de asignación por referencia de una estructura en Go
Actualicemos ahora el script, utilizando un puntero.
package main
import "fmt"
type Pais struct {
Nombre string
}
func main() {
pais1 := Pais{Nombre: "Canada"}
pais2 := &pais1
pais1.Nombre = "Inglaterra"
fmt.Printf("%+v\n", pais1)
fmt.Printf("%+v\n", *pais2)
}
🍿 Descripción del ejemplo de asignación por referencia de una estructura en Go
El resultado sera.
{Nombre:Inglaterra}
{Nombre:Inglaterra}
Como vemos si modificamos pais1
este también tendrá efecto en pais2
, debido a que usamos la dirección de la memoria.
Para ello…
-
La igualdad referencia un puntero
pais2 := &pais1
establecido mediante el ampersand&
antes en&pais1
. -
Agregamos el asterisco
*
en*pais2
, para acceder al valor de la dirección de la memoria (si no lo agregamos imprimirá la dirección en lugar de su valor).