Punteros de Golang

Punteros de Golang
Un puntero en la programación se refiere a la variable utilizada para almacenar la dirección de memoria de otra variable en el sistema. La dirección de memoria de la variable se expresa en formato hexadecimal que comienza con 0x.

Los punteros son útiles, ya que nos permiten almacenar la memoria de una dirección donde se almacenan los datos de una variable. Usando punteros, determinamos el valor almacenado por la variable en esa dirección de memoria.

En este artículo amigable para principiantes, discutiremos cómo comenzar con consejos en el lenguaje de programación GO.

Golang declara variable

Declaramos un puntero igual que declaramos una variable normal. Sin embargo, usamos el operador de dererencia para mostrar que la variable contiene un puntero.

Antes de declarar una variable, hay dos operadores con los que debemos estar familiarizados:

  1. * - El asterisco en la declaración del puntero se conoce como operador de deserencia. Se utiliza para declarar un valor de puntero y acceder al valor almacenado en una dirección de memoria específica.
  2. & - En el puntero, el operador de direcciones se utiliza para acceder a la dirección de memoria de una variable. También puede devolver la dirección de la variable.

La sintaxis a continuación muestra cómo declarar una variable de puntero:

var pointer_name *data_type

Por ejemplo, el siguiente código declara una variable de puntero "PTR" que contiene la dirección de los tipos int tipos.

var ptr *int

Golang Inicializar puntero

Podemos inicializar un puntero asignando la dirección de memoria de una variable utilizando el operador de direcciones, que se muestra arriba.

Un ejemplo es como se muestra:

paquete principal
importar "fmt"
func Main ()
// declarar variable
x: = 100
// declarar e inicializar puntero
var ptr *int = & x
// Dirección de impresión
fmt.Println (PTR)

En el ejemplo anterior, comenzamos declarando una variable que contiene un valor entero. Luego creamos un puntero que contiene la dirección de memoria de la variable.

Una vez que imprimimos la dirección, debemos obtener una salida de ejemplo como se muestra:

$ Go Run Pointer.ir
0xc000018098

También podemos declarar una variable y establecer el valor más adelante en el código. Un ejemplo es como se muestra:

paquete principal
importar "fmt"
func Main ()
// declarar variable
x: = 100
// Declarar
var ptr *int
PTR = & X
// Dirección de impresión
fmt.Println (PTR)

Aquí, declaramos el puntero y luego establecemos su valor utilizando el operador de direcciones.

Golang nil Pointer

Si declara un puntero y no asigna un valor, el puntero contiene un valor nulo. Por ejemplo:

paquete principal
importar "fmt"
func Main ()
var ptr *int
fmt.Println (PTR)

El código anterior devuelve nil.

Tipo de puntero

En nuestro ejemplo, declaramos el tipo de puntero. Esto significa que el puntero solo puede mantener la memoria abordada del tipo de datos especificado.

Si intenta almacenar la dirección de otro tipo, el compilador devuelve un error como se muestra en el ejemplo a continuación:

paquete principal
importar "fmt"
func Main ()
// declarar variable
str: = "hola"
var ptr *int
ptr = & str
// Dirección de impresión
fmt.Println (PTR)

En el ejemplo anterior, declaramos una variable con el tipo int. Sin embargo, asignamos una dirección de un tipo de cadena.

El compilador devuelve un error como:

.\puntero.Ir: 11: 6: No puedo usar & str (tipo *cadena) como tipo *int en la asignación

Para evitar esto, puede usar el método literal de declaración de puntero. Por ejemplo, podemos hacer:

paquete principal
importar "fmt"
func Main ()
str: = "hola"
ptr: = & str
fmt.Println (PTR)

El ejemplo anterior permite que el compilador determine el tipo de dirección que se mantenga en el puntero especificado.

Golang Pointer Derferencia

Para acceder al valor almacenado en una dirección específica, podemos usar el operador Derferencing. Un código de ejemplo es como se muestra:

paquete principal
importar "fmt"
func Main ()
x: = 100
PTR: = & X
fmt.Println ("x:", x)
fmt.Println ("Dirección:", PTR)
fmt.Println ("Valor en la dirección:", *PTR)

El código anterior utiliza el operador Derference para obtener el valor almacenado en la dirección en poder del puntero "PTR"

La salida resultante es como:

X: 100
Dirección: 0xc000018098
Valor en la dirección: 100

Conclusión

Esta guía lo guía a través de los conceptos básicos de trabajar con consejos en Go. Usando punteros, puede acceder y almacenar la dirección de memoria de una variable. También puede usar el puntero para acceder a la variable almacenada en una dirección de memoria específica.

Gracias por leer!