馃敟 VALOR VS REFERENCIA (COPIA VS PUNTERO)

驴Cu谩ntas formas existen para pasar variables a una funci贸n en Go?

En el lenguaje Go, existen dos m茅todos principales para enviar informaci贸n a una funci贸n: diferencia entre paso de variables por valor y por referencia en Go. Es fundamental comprender ambos enfoques para escribir c贸digo eficiente y seguro.

  • Enviar una copia del valor de la variable.
  • Enviar un puntero, es decir, la direcci贸n de memoria de la variable.

Ejemplo de paso de argumentos por valor en Go

Un ejemplo de paso por valor en Go se observa cuando una funci贸n recibe una copia de la variable original. Cualquier modificaci贸n dentro de la funci贸n no afecta el valor fuera de ella.

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 convierte una altura de metros a pies. El valor original de la variable altura permanece sin cambios, ya que solo se trabaja con una copia.

Ejemplo de paso de argumentos por referencia en Go

Cuando se utiliza el paso por referencia, se env铆a la direcci贸n de memoria de la variable. Esto permite modificar el valor original desde la funci贸n, lo que ilustra claramente las ventajas y desventajas de pasar variables 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.6 mts
Despues de envejecer: 1.6 mts

En este ejemplo, la funci贸n modifica directamente el valor de la variable original, ya que trabaja con su puntero.

驴Cu谩ndo usar punteros en Go?

Saber cu谩ndo usar punteros en Go es clave para optimizar el rendimiento y la gesti贸n de memoria. Los punteros son 煤tiles cuando se necesita modificar el valor original de una variable dentro de una funci贸n, o cuando se desea evitar la copia de grandes estructuras de datos.

Mejores pr谩cticas con punteros en Go

Al trabajar con punteros, es importante seguir las mejores pr谩cticas con punteros en Go: evitar el uso innecesario de punteros en tipos primitivos, asegurarse de que los punteros no apunten a memoria liberada y documentar claramente las funciones que modifican valores a trav茅s de referencias.


Conclusi贸n

Comprender la diferencia entre pasar variables por valor y por referencia en Go es esencial para escribir c贸digo robusto y eficiente. Elegir el m茅todo adecuado depende del contexto y de los objetivos de tu funci贸n, permitiendo un mejor control sobre el comportamiento y la memoria de tus programas.


Cuestionario de repaso

  1. 驴Cu谩l es la principal diferencia entre pasar una variable por valor y por referencia en Go?
  2. 驴Qu茅 sucede con la variable original cuando se pasa por valor a una funci贸n?
  3. 驴En qu茅 casos es recomendable utilizar punteros en Go?
  4. Menciona una ventaja y una desventaja de pasar variables por referencia.
  5. 驴Qu茅 precauciones debes tener al trabajar con punteros en Go?