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.