Argumentos de función en Golang

Una función en Golang es una colección de declaraciones que se utiliza para realizar una tarea específica y devolver el resultado a la persona que llama. Una función también puede realizar alguna tarea específica sin devolver nada. Golang admite dos formas diferentes de pasar argumentos a la función, es decir , pasar por valor o llamar por valor y pasar por referencia o llamar por referencia . De forma predeterminada, Golang utiliza la forma de llamada por valor para pasar los argumentos a la función.

Términos básicos en el paso de parámetros a la función:

  • Los parámetros pasados ​​a la función se denominan parámetros reales.
  • Los parámetros recibidos por la función se denominan Parámetros Formales.

Llamar por valor

En este paso de parámetros, los valores de los parámetros reales se copian a los parámetros formales de la función y los dos tipos de parámetros se almacenan en diferentes ubicaciones de memoria. Por lo tanto, los cambios realizados dentro de las funciones no se reflejan en los parámetros reales de la persona que llama.

Ejemplo 1: En el siguiente programa, puede ver que el valor de Z no puede ser modificado por la función modificar .

// Go program to illustrate the
// concept of the call by value
package main
  
import "fmt"
  
// function which modifies
// the value
func modify(Z int) {
    Z = 70
}
  
// Main function
func main() {
  
    var Z int = 10
      
    fmt.Printf("Before Function Call, value of Z is = %d", Z)
  
    // call by value
    modify(Z)
      
    fmt.Printf("\nAfter Function Call, value of Z is = %d", Z)
}

Producción:

Before Function Call, value of Z is = 10
After Function Call, value of Z is = 10

Ejemplo 2: en el programa a continuación, la función de intercambio no puede intercambiar los valores ya que estamos usando la llamada por valor.

// Go program to illustrate the
// concept of the call by value
package main
  
import "fmt"
  
// function which swap values
func swap(x, y int) int {
  
    // taking a temporary variable
    var tmp int
  
    tmp = x
    x = y
    y = tmp
  
    return tmp
}
  
// Main function
func main() {
  
    var f int = 700
    var s int = 900
  
    fmt.Printf("Values Before Function Call\n")
    fmt.Printf("f = %d and s = %d\n", f, s)
  
    // call by values
    swap(f, s)
  
    fmt.Printf("\nValues After Function Call\n")
    fmt.Printf("f = %d and s = %d", f, s)
}

Producción:

Values Before Function Call
f = 700 and s = 900

Values After Function Call
f = 700 and s = 900

Llamar por referencia

Aquí, utilizará el concepto de punteros . El operador de desreferencia * se utiliza para acceder al valor en una dirección. El operador de dirección & se utiliza para obtener la dirección de una variable de cualquier tipo de datos. Tanto los parámetros reales como los formales se refieren a las mismas ubicaciones, por lo que cualquier cambio realizado dentro de la función se refleja en los parámetros reales de la persona que llama.

Ejemplo 1: en la llamada a la función, estamos pasando la dirección de la variable y usando el operador de desreferenciación * para modificar el valor. Entonces, después de la función, es decir , modificar , encontrará el valor actualizado.

// Go program to illustrate the
// concept of the call by Reference
package main
  
import "fmt"
  
// function which modifies
// the value
func modify(Z *int) {
    *Z = 70
}
  
// Main function
func main() {
  
    var Z int = 10
  
    fmt.Printf("Before Function Call, value of Z is = %d", Z)
  
    // call by Reference
    // by passing the address
    // of the variable Z
    modify(&Z)
  
    fmt.Printf("\nAfter Function Call, value of Z is = %d", Z)
}

Producción:

Before Function Call, value of Z is = 10
After Function Call, value of Z is = 70

Ejemplo 2: al usar la llamada por referencia, la función de intercambio podrá intercambiar los valores como se muestra a continuación.

// Go program to illustrate the
// concept of the call by Reference
package main
  
import "fmt"
  
// function which swap values
// taking the pointer to integer
func swap(x, y *int) int {
  
    // taking a temporary variable
    var tmp int
  
    tmp = *x
    *x = *y
    *y = tmp
  
    return tmp
}
  
// Main function
func main() {
  
    var f int = 700
    var s int = 900
  
    fmt.Printf("Values Before Function Call\n")
    fmt.Printf("f = %d and s = %d\n", f, s)
  
    // call by Reference
    // by passing the address 
    // of the variables
    swap(&f, &s)
  
    fmt.Printf("\nValues After Function Call\n")
    fmt.Printf("f = %d and s = %d", f, s)
}

Producción:

Values Before Function Call
f = 700 and s = 900

Values After Function Call
f = 900 and s = 700

Publicación traducida automáticamente

Artículo escrito por Anshul_Aggarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *