Pointers
Un pointer contiene la dirección de memoria de un valor. & toma la dirección de una variable, y * desreferencia un pointer para obtener (o establecer) el valor al que apunta. A diferencia de Rust, Go no tiene reglas de ownership ni de borrowing que satisfacer — los pointers son simplemente una forma directa de compartir y mutar un valor.
package main
import "fmt"
func main() {
count := 10
pointer := &count
fmt.Println(*pointer)
*pointer = 20
fmt.Println(count)
}10 20
Pasar un pointer a una función
Go pasa los argumentos por valor por defecto — una función normalmente recibe su propia copia. Pasar un pointer en su lugar permite que una función modifique la variable real de quien la llama, que es cómo double de abajo cambia value en main aunque value en sí nunca se reasignó allí.
package main
import "fmt"
func double(n *int) {
*n = *n * 2
}
func main() {
value := 21
double(&value)
fmt.Println(value)
}42
Siguiente: manejo de errores — el patrón explícito if err != nil de Go en vez de excepciones.
Practice exercise
Escribe una función increment(n *int) que sume 1 al valor al que apunta n. Llámala con un pointer a una variable count := 5, luego imprime count.