Esta pagina se ve mejor con JavaScript habilitado

Go pointers

 ·  🎃 kr0m

El valor de una variable puede ser pasado a una función de varias maneras:

  • Valor: Se le pasa una copia del valor de la variable para que trabaje en su ámbito local.
  • Referencia: Se le pasa la dirección de memoria(puntero) donde está la variable, haciendo de esta una variable “compartida”.

Si eres nuevo en el mundo de Go te recomiendo los siguientes artículos anteriores:


En Go para obtener la dirección de memoria de una variable haremos referencia sobre ella del siguiente modo:

&VARIABLE_NAME

Si una función va a recibir una variable de entrada que sea un puntero, la definiremos del siguiente modo:

func zeroptr(iptr *int) {

En este sencillo ejemplo podemos ver dos funciones, zeroval que recibe el valor de la variable i por copia y la función zeroptr que lo recibe por referencia:

package main

import "fmt"

func zeroval(ival int) {
    ival = 0
}

func zeroptr(iptr *int) {
    *iptr = 0
}

func main() {
    i := 1
    fmt.Println("i value:", i)

    zeroval(i)
    fmt.Println("i value:", i)

    zeroptr(&i)
    fmt.Println("i value:", i)

    fmt.Println("Memory address i variable:", &i)
}

Al ejecutar el código obtenemos la siguiente salida:

i value: 1
i value: 1
i value: 0
Memory address i variable: 0x84c01c0a8

Podemos ver que el valor de la variable i de la función principal solo se ha visto afectada cuando hemos pasado el puntero, ya que de este modo la hemos convertido en una variable “compartida” entre la función principal y zeroptr.

Si te ha gustado el artículo puedes invitarme a un RedBull aquí