Go Punteros

Go Punteros (Pointers)

¿Qué son los punteros en Go?

Un puntero es una referencia al valor almacenado en memoria.

Para obtener la referencia al puntero del valor debes usar el símbolo “&” por delante y para obtener la desreferencia usas el símbolo “*****”

Por defecto Go envia los argumentos como valor, si deseas que los argumentos sean enviados por referencia debes usar un puntero.

Hagamos una prueba. Crea dos métodos, el primero “addOne” que reciba un valor entero al cual le sumas un valor. Este argumento será recibido por valor. No se usan punteros aquí.

func addOne(value int) {
      value = value + 1
}

El segundo método a crear es “addOnePointer” que haga lo mismo pero que reciba el argumento como como puntero para desreferenciarlo de su posición de memoria a la variable. Este argumento será recibido como referencia.

func addOnePointer(value *int) {
      *value = *value + 1
}

Haciendo una prueba simple puedes observar que en el primer método “func addOne(value int) “ el argumento se recibe por valor como una copia por lo cual la variable original no es modificada.

En el segundo método func addOnePointer(value *int) en donde indicamos usar el puntero, el valor se recibe por referencia y la variable original si es modifica, ya que estamos accediendo a la posición de memoria y modificandola allí.

package main

import "fmt"

// value param
func addOne(value int) {
      value = value + 1
}

// pointer param, desreference param
func addOnePointer(value *int) {
      *value = *value + 1
}

func main() {
      i := 1
      fmt.Println("Value of i is:", i)

      addOne(i)
      fmt.Println("addOne:", i)

      // using memory address of i (pointer)
      addOnePointer(&i)
      fmt.Println("addOnePointer:", i)

}

El resultado de la prueba es el siguiente:

go run pointers.go
Value of i is: 1
addOne: 1
addOnePointer: 2

go  golang