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