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 dex
se puede obtener con&x
Si imprime&x
confmt.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
lax
el 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.
nil
no 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 ynil
no 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:
- Uso de NGINX Reverse Proxy para brindar servicios de Go
- Hacer una copia de una estructura en Go
- Los conceptos básicos de un servidor web Go
- Ordenar un tipo de mapa en Go
- Ir consejos en pocas palabras
- Explicación de las etiquetas Go
- Ir al formato de fecha y hora
- Procesamiento JSON con Go
- Ir a funciones variadas
- Hoja de referencia de Go Strings
- Explicación de la interfaz Go Empty
- Depuración de Go con VS Code y Delve
- Parámetros de devoluciones de Go Named
- Generación de cadenas y números aleatorios en Go
- Estructura del sistema de archivos de un proyecto de Go
- Algoritmo de búsqueda binaria implementado en Go
- Uso de indicadores de línea de comando en Go
- GOPATH explicado
- Cree una aplicación de línea de comandos con Go: lolcat
- Construyendo un comando CLI con Go: cowsay
- Uso de Shell Pipes con Go
- Tutorial de Go CLI: clon de la fortuna
- Enumere los archivos en una carpeta con Go
- Use Ir para obtener una lista de repositorios de GitHub
- Ve, agrega un trozo de cadenas a un archivo
- Ve, convierte una cadena en un segmento de bytes
- Visualice sus contribuciones locales de Git con Go
- Introducción a la creación de perfiles de memoria y CPU de Go
- Resolver el error "no admite la indexación" en un programa Go
- Medir el tiempo de ejecución en un programa Go
- Creación de un rastreador web con Go para detectar títulos duplicados
- Siga las mejores prácticas: ¿puntero o receptores de valor?
- Siga las mejores prácticas: ¿Debería utilizar un método o una función?
- Ir a estructuras de datos: Establecer
- Hoja de referencia de Go Maps
- Genere implementaciones para tipos genéricos en Go
- Ir a estructuras de datos: diccionario
- Ir a estructuras de datos: tabla hash
- Implementar oyentes de eventos en canales de paso
- Ir a estructuras de datos: apilar
- Ir a estructuras de datos: cola
- Ir a estructuras de datos: árbol de búsqueda binaria
- Ir a estructuras de datos: gráfico
- Ir a estructuras de datos: lista vinculada
- La guía completa de Go Data Structures
- Comparación de valores de Go
- ¿Go está orientado a objetos?
- Trabajar con una base de datos SQL en Go
- Usar variables de entorno en Go
- Ir al tutorial: API REST respaldada por PostgreSQL
- Habilitación de CORS en un servidor web Go
- Implementación de una aplicación Go en un contenedor Docker
- Por qué Go es un lenguaje poderoso para aprender como desarrollador PHP
- Ve, elimina el carácter de nueva línea io.Reader.ReadString
- Ir, cómo ver los cambios y reconstruir su programa
- Ve, cuenta los meses desde una fecha
- Acceder a los parámetros HTTP POST en Go