Punteros en Go

En Go, los punteros son fáciles de aprender. El uso de punteros en Go permite realizar algunas tareas de manera más sencilla.

A continuación, aprendamos paso a paso sobre los punteros en Go.

Todos sabemos que una variable es un marcador de posición conveniente que se utiliza para referenciar una dirección de memoria de la computadora.

El operador de dirección en Go es &, cuando se coloca delante de una variable devuelve la dirección de memoria de dicha variable.

El siguiente ejemplo demuestra la dirección de una variable en la memoria:

Ejemplo

package main

import "fmt"

func main() {
   var a int = 10  

   fmt.Printf("Dirección de la variable: %x\n", &a  )
}

El resultado de ejecutar el código anterior es:

变量的地址: 20818a220

Ahora que hemos entendido qué es una dirección de memoria y cómo acceder a ella, a continuación presentaremos los punteros en detalle.


Qué es un puntero

Una variable puntero apunta a la dirección de memoria de un valor.

Similar a las variables y constantes, antes de usar un puntero necesitas declararlo. El formato de declaración de un puntero es el siguiente:

var var_name *var-type

var-type es el tipo de puntero, var_name es el nombre de la variable puntero, y el signo * se utiliza para especificar que la variable es un puntero. Las siguientes son declaraciones de puntero válidas:

var ip *int        /* 指向整型*/
var fp *float32    /* 指向浮点型 */

En este ejemplo, se trata de punteros a int y float32.


Cómo usar punteros

Proceso de uso de punteros:

  • Definir una variable puntero.
  • Asignar un valor a la variable puntero.
  • Acceder al valor de la dirección a la que apunta la variable puntero.

Se antepone el signo * (prefijo) al tipo de puntero para obtener el contenido al que apunta el puntero.

Ejemplo

package main

import "fmt"

func main() {
   var a int= 20   /* Declarar la variable real */
   var ip *int        /* Declarar variable puntero */

   ip = &a  /* Almacenar la dirección de la variable puntero */

   fmt.Printf("La dirección de la variable a es: %x\n", &a  )

   /* Almacenar la dirección de la variable puntero */
   fmt.Printf("La dirección del puntero almacenada en la variable ip es: %x\n", ip )

   /* Usar el puntero para acceder al valor */
   fmt.Printf("El valor de la variable *ip es: %d\n", *ip )
}

El resultado de ejecutar el ejemplo anterior es:

a 变量的地址是: 20818a220
ip 变量储存的指针地址: 20818a220
*ip 变量的值: 20

Puntero nulo en Go

Cuando un puntero se define sin asignarse a ninguna variable, su valor es nil.

El puntero nil también se conoce como puntero nulo.

nil, conceptualmente, es igual que null, None, nil y NULL en otros lenguajes; todos se refieren a un valor cero o vacío.

Una variable puntero generalmente se abrevia como ptr.

Veamos el siguiente ejemplo:

Ejemplo

package main

import "fmt"

func main() {
   var  ptr *int

   fmt.Printf("El valor de ptr es: %x\n", ptr  )
}

El resultado del ejemplo anterior es:

ptr 的值为 : 0

Comprobación de puntero nulo:

if(ptr != nil)     /* ptr 不是空指针 */
if(ptr == nil)    /* ptr 是空指针 */

Más sobre punteros en Go

A continuación, presentaremos más aplicaciones de punteros en Go:

Contenido Descripción
Arreglo de punteros en Go Puedes definir un arreglo de punteros para almacenar direcciones.
Puntero a puntero en Go Go admite punteros a punteros.
Pasar parámetros de puntero a funciones en Go Al pasar parámetros por referencia o dirección, se puede cambiar su valor durante la llamada a la función.
Otras extensiones