🥇 Valor vs Referencia (Copia vs Puntero)
🍿 ¿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.