Ir - Llamar por referencia

los call by referenceEl método de pasar argumentos a una función copia la dirección de un argumento en el parámetro formal. Dentro de la función, la dirección se usa para acceder al argumento real usado en la llamada. Esto significa que los cambios realizados en el parámetro afectan el argumento pasado.

Para pasar el valor por referencia, los punteros de argumento se pasan a las funciones como cualquier otro valor. En consecuencia, debe declarar los parámetros de la función como tipos de puntero como en la siguiente funciónswap(), que intercambia los valores de las dos variables enteras apuntadas por sus argumentos.

/* function definition to swap the values */
func swap(x *int, y *int) {
   var temp int
   temp = *x    /* save the value at address x */
   *x = *y      /* put y into x */
   *y = temp    /* put temp into y */
}

Para obtener más información sobre los punteros en la programación de Go, vaya a Go - Punteros.

Por ahora, llamemos a la función swap () pasando valores por referencia como en el siguiente ejemplo:

package main

import "fmt"

func main() {
   /* local variable definition */
   var a int = 100
   var b int = 200

   fmt.Printf("Before swap, value of a : %d\n", a )
   fmt.Printf("Before swap, value of b : %d\n", b )

   /* calling a function to swap the values.
   * &a indicates pointer to a ie. address of variable a and 
   * &b indicates pointer to b ie. address of variable b.
   */
   swap(&a, &b)

   fmt.Printf("After swap, value of a : %d\n", a )
   fmt.Printf("After swap, value of b : %d\n", b )
}
func swap(x *int, y *int) {
   var temp int
   temp = *x    /* save the value at address x */
   *x = *y    /* put y into x */
   *y = temp    /* put temp into y */
}

Coloque el código anterior en un solo archivo Go, compílelo y ejecútelo. Produce el siguiente resultado:

Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :200
After swap, value of b :100

Muestra que el cambio también se ha reflejado fuera de la función, a diferencia de la llamada por valor, donde los cambios no se reflejan fuera de la función.