Ir consejos en pocas palabras

Los punteros no son exclusivos de Go, pero Go tiene un sabor único de punteros, por lo que es bueno saber por qué son únicos, ya que usará punteros en todos los programas de Go.

¿Por qué punteros?

Todo en Go se pasa por valor, como enCy en todos los idiomas descendientes de C.

Si pasa un Int a una función, la variable se copia.

Si pasa un puntero, el puntero se copia, peronoel valor al que apunta.

Entonces, en la mayoría de los casos, los punteros se utilizan para llamar a funciones y pasar parámetros por referencia.

Un ejemplo

Tomemos una variable simplex, definido como un número entero con valor5:

x := 5

Ahora, la dirección de memoria dexse puede obtener con&x

Si imprime&xconfmt.Println, verás que es algo así como0xc42000e248: una dirección de memoria.

Ahora, podemos asignar este valor a una variable, y esa variable será un puntero ax.

y := &x

Si escribimos esta declaración de asignación

*y = 10

laxel valor ahora será10.

Sin aritmética de puntero

Los punteros Go son similares a los punteros de C y C ++, pero son más seguros, ya que no puede realizar operaciones como

var x *int;
x++;

en un puntero, porque la dirección de un puntero no se puede modificar. Sin dualidad puntero / matriz.

Devolver punteros de variables de función local

Las variables de función local a las que hacen referencia los punteros devueltos permanecerán disponibles mientras el puntero esté disponible. Esto asegurará que el puntero siempre apunte a lo que piensa.

Punteros nulos

El valor cero de un puntero esnil. Esto significa que todavía es posible un puntero nulo, pero esto causa menos problemas que en otros lenguajes (C, Java, C ++) porque hay menos tipos enmascarados como punteros y menos otros nulos por ahí. Por ejemplo, las cadenas en C son punteros. En Go, son un tipo.

nilno es un retorno común para las funciones, como en los lenguajes de valor de retorno único; la verificación de errores está más organizada ynilno es un valor cero común. Muchos tipos de datos integrados (cadenas, matrices, mapas, cortes ...) tienen valores cero diferentes anil.

Referencias


Más tutoriales de go: