¿Cuántas formas de enviar una variable a una función existen en Go?
Existen dos formas de enviar una variable a una función.
- Enviar una copia de su valor.
- Enviar un puntero de esta (su dirección en la memoria).
Ejemplo de paso de argumentos por copia en Go
func equivalenciaEnPies(altura float32) float32 {
altura = altura * 3.28
return altura
}
var altura float32 = 1.70
fmt.Println("La altura es:", altura, "mts")
fmt.Println("La altura es:", equivalenciaEnPies(altura), " pies")
fmt.Println("La nueva altura es:", altura, "mts")
La altura es: 1.7 mts
La altura es: 5.576 pies
La nueva altura es: 1.7 mts
En este caso la función ha convertido una altura de metros a pies, la intención de este proceso es solo obtener la equivalencia de la altura en pies, el valor original de altura no es modificado.
Ejemplo de paso de argumentos por referencia en Go
func conversionEnPies(altura *float32) float32 {
*altura = *altura - 0.10
return *altura
}
var altura float32 = 1.70
fmt.Println("La altura es:", altura, "mts")
fmt.Println("Al envejecer:", conversionEnPies(&altura), "mts")
fmt.Println("Despues de envejecer:", altura, "mts")
La altura es: 1.7 mts
Al envejecer: -1.5799999 mts
Despues de envejecer: -1.5799999 mts
En este caso la función a convertido una altura de metros a pies, la intención de este proceso es obtener la equivalencia de la altura en pies y modificar el valor de la variable original.