Los punteros en el lenguaje de programación Go o Golang es una variable que se utiliza para almacenar la dirección de memoria de otra variable. Los punteros en Golang también se denominan variables especiales. Las variables se utilizan para almacenar algunos datos en una dirección de memoria particular en el sistema. La dirección de memoria siempre se encuentra en formato hexadecimal (comenzando con 0x como 0xFFAAF, etc.).
Antes de comenzar, hay dos operadores importantes que usaremos en punteros, es decir
* Operador también denominado operador de desreferenciación utilizado para declarar la variable de puntero y acceder al valor almacenado en la dirección.
& operador denominado como operador de dirección utilizado para devolver la dirección de una variable o para acceder a la dirección de una variable a un puntero.
Declarando un puntero :
var pointer_name *Data_Type
Ejemplo: a continuación se muestra un puntero de tipo string que puede almacenar solo las direcciones de memoria de las variables de string .
var s *string
Inicialización del puntero: para hacer esto, debe inicializar un puntero con la dirección de memoria de otra variable utilizando el operador de dirección como se muestra en el siguiente ejemplo:
// normal variable declaration var a = 45 // Initialization of pointer s with // memory address of variable a var s *int = &a
Ejemplo: En el siguiente ejemplo, usando puntero accederemos al valor de la variable cuya dirección está almacenada en puntero.
// Golang program to show how to declare // and access pointer variable in Golang package main import ( "fmt" ) func main() { // variable declaration var dummyVar string = "Geeks For Geeks" // pointer declaration var pointerVariable *string // assigning variable address to pointer variable pointerVariable = &dummyVar // Prints the address of the dummyVar variable fmt.Printf("\nAddress of the variable: %v", &dummyVar) // Prints the address stored in pointer fmt.Printf("\nAddress stored in the pointer variable: %v", pointerVariable) // Value of variable fmt.Printf("\nValue of the Actual Variable: %s", dummyVar) // Value of variable whose address is stored in pointer fmt.Printf("\nValue of the Pointer variable: %s", *pointerVariable) }
Producción:
Address of the variable: 0xc00010a040 Address stored in the pointer variable: 0xc00010a040 Value of the Actual Variable: Geeks For Geeks Value of the Pointer variable: Geeks For Geeks
Explicación: Aquí se usa el símbolo (&) para obtener la dirección de la variable que almacena el valor como «Geeks for Geeks». La dirección propiedad de esta variable es la misma que está almacenada en el puntero. Por lo tanto, la salida de &dummyVar y pointerVariable es la misma. Para acceder al valor almacenado en la dirección, que se almacena en el puntero, usamos el símbolo de usuario (*).