"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo afectan los punteros a la modificación de valores en las funciones Go?

¿Cómo afectan los punteros a la modificación de valores en las funciones Go?

Publicado el 2024-11-07
Navegar:573

How do pointers affect value modification in Go functions?

Comprensión de la modificación de valores con punteros en Go

En Go, los punteros permiten el acceso indirecto y la modificación de valores. Sin embargo, comprender cómo funcionan los punteros es crucial al pasarlos a funciones.

Al pasar un puntero a una función, surgen dos escenarios: modificación de valor versus reasignación de puntero.

Escenario 1 : Modificación de valor

Considere este código:

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   *p = Test{4}
}

Aquí, la función f recibe un puntero a la estructura de prueba. Dentro de f, al puntero desreferenciado (*p) se le asigna una nueva estructura de prueba con un valor de 4. Esto modifica efectivamente la estructura i original en la función principal, y el resultado es 4.

Escenario 2: Reasignación de puntero

Ahora, cambiemos ligeramente el código:

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 2
}
func f(p *Test) {
   // ?
   p = &Test{4}
}

En este caso, en lugar de modificar el valor señalado, la función reasigna el puntero p a una nueva estructura de prueba con un valor de 4. Dado que p es una variable local dentro de f, este cambio no afecta la estructura i original en la función principal, y la salida permanece 2.

Solución: Modificar el valor puntiagudo

Para modificar el valor puntiagudo, debemos desreferenciar el puntero y directamente acceda al miembro de la estructura:

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   p.Value = 4
}

Al usar p.Value, modificamos el campo Valor de la estructura original, lo que da como resultado un resultado de 4.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3