¿Qué son los punteros en programación?
Cuando una variable se declara en Go, una dirección en la memoria es asignada. Esto permite que el valor que la variable tenga, pueda ser almacenado, modificado y leído. Es posible acceder a esta dirección utilizando el carácter &
precidiendo el nombre de la variable.
Ejemplo sencillo del uso de punteros en Go
package main
import "fmt"
func main() {
color := "rojo"
fmt.Println(color, &color)
}
rojo 0xc00000e1e0
La variable color, con el valor rojo, tiene la dirección 0xc00000e1e0
en la memoria, y esta en base hexadecimal (base16).
Ejemplo de diferencia copia vs referencia en Go
package main
import "fmt"
func main() {
vehiculo1 := "rojo"
fmt.Println("El vehiculo1 es", vehiculo1)
vehiculo2 := vehiculo1
fmt.Println("El vehiculo2 es", vehiculo2)
vehiculo3 := &vehiculo1
fmt.Println("El vehiculo3 es", *vehiculo3)
vehiculo1 = "gris"
fmt.Println("El vehiculo1 es", vehiculo1, &vehiculo1)
fmt.Println("El vehiculo2 es", vehiculo2, &vehiculo2)
fmt.Println("El vehiculo3 es", *vehiculo3, vehiculo3)
}
Salida
El vehiculo1 es rojo
El vehiculo2 es rojo
El vehiculo3 es rojo
El vehiculo1 es gris 0xc000010230
El vehiculo2 es rojo 0xc000010250
El vehiculo3 es gris 0xc000010230