Skip to content

Guía de Inicio con Go

Este artículo te guiará sobre cómo comenzar a aprender el lenguaje Go. Solo desde el punto de vista de la sintaxis, no es difícil de aprender, probablemente puedas empezar a usarlo en unos pocos días. Sin embargo, siguiendo la tradición, antes de comenzar formalmente, necesitamos entender su contexto y origen.

Antecedentes

El lenguaje Go fue creado conjuntamente por tres grandes figuras:

  • Ken Thompson, ganador del Premio Turing, fundador del sistema Unix, creador del lenguaje B, creador del lenguaje C
  • Rob Pike, uno de los autores del sistema operativo Plan9, uno de los inventores de UTF-8, líder del diseño del lenguaje Go
  • Robert Griesemer, desarrollador del motor JS V8, el más joven de los tres

También está Renee French, esposa de Rob Pike, quien diseñó el logo del lenguaje Go, que es una marmota azul.

Un día, durante la larga espera de compilación de un proyecto C++, los tres ingenieros se sintieron muy aburridos. Fue en ese momento cuando a Rob Pike se le ocurrió una idea novedosa: quería diseñar un lenguaje de programación simple, pequeño, de compilación rápida y con un rendimiento notable, para que no tuvieran que enfrentar largas esperas cada vez que compilaran. Después de una breve lluvia de ideas, los tres celebraron una reunión breve el 20 de septiembre de 2007 para discutir y diseñar el prototipo inicial de este lenguaje. Fue desde ese momento que el lenguaje Go nació oficialmente. Posteriormente, este pequeño equipo atrajo a más y más desarrolladores con ideas afines, y finalmente el 10 de noviembre de 2009, Google liberó oficialmente el lenguaje Go bajo la licencia BSD-3-Clause, lanzando la primera versión preliminar y formando un equipo de desarrollo oficial.

Consejo

Cabe mencionar que podrías ver en otros lugares que lo llaman Golang, incluyendo el repositorio de Github de este sitio que se llama Golang-Doc, pero su nombre oficial siempre ha sido Go. En los primeros días, como el dominio go fue registrado, el sitio web oficial adoptó el dominio golang.org, por lo que los recién llegados pensaban que se llamaba Golang.

Así era el sitio web oficial al principio

Después, el equipo de Go pasó tres años de diseño y desarrollo, y en marzo de 2012 lanzó la primera versión oficial Go1.0 (en ese momento la cadena de herramientas y el runtime de Go todavía estaban escritos en C, hasta Go1.5 que completó el bootstrap). A partir de entonces, se publican dos actualizaciones de versiones menores cada año, operando y manteniéndose hasta ahora.

Los tres fundadores en realidad se retiraron hace mucho tiempo. Durante la mayor parte del tiempo, el líder del equipo fue Russ Cox, quien había participado en el trabajo de desarrollo incluso antes de que Go se hiciera público. Después, dirigió el equipo de Go durante 12 años, hasta agosto de 2024 cuando renunció, siendo sucedido por Austin Clements para liderar el trabajo de desarrollo posterior.

Si quieres profundizar en la historia del lenguaje Go, visita Go History para conocer más contenido.

Características

  • Sintaxis simple Go ha hecho concesiones en libertad y flexibilidad a cambio de mejor mantenibilidad y una curva de aprendizaje suave.
  • Despliegue amigable Los archivos binarios compilados estáticamente de Go no dependen de un entorno de ejecución adicional, y la velocidad de compilación también es muy rápida.
  • Compilación cruzada Go solo necesita configurar dos parámetros simples al compilar para compilar programas que puedan ejecutarse en otras plataformas.
  • Concurrencia nativa El soporte de Go para la concurrencia es completamente natural, solo se necesita una palabra clave para iniciar una corrutina asíncrona.
  • Recolección de basura Go tiene un excelente rendimiento de GC, en la mayoría de los casos la latencia del GC no supera 1 milisegundo.
  • Biblioteca estándar rica Desde el procesamiento de cadenas hasta el análisis AST del código fuente, una biblioteca estándar potente y rica es la base sólida del lenguaje Go.
  • Cadena de herramientas completa Go tiene una cadena de herramientas de desarrollo completa, que cubre compilación, pruebas, gestión de dependencias, análisis de rendimiento, entre otros aspectos.

El lenguaje Go ha abandonado la herencia, debilitado la OOP, clases, metaprogramación, genéricos, expresiones lambda y otras características, tiene un buen rendimiento y una baja barrera de entrada. Es adecuado para el desarrollo de servicios en la nube, desarrollo del lado del servidor de aplicaciones y programación de redes. Tiene GC incorporado, no requiere que los desarrolladores gestionen la memoria manualmente, y la compilación estática y cruzada también son muy amigables para las operaciones.

El lenguaje Go también tiene muchas desventajas, como el manejo de errores criticado, genéricos incompletos, aunque la biblioteca estándar es muy rica pero tiene pocas estructuras de datos incorporadas, el tipo interface{} está por todas partes, no tiene tipo enumerado, además, el equipo de desarrollo de Go es muy obstinado y no es bueno escuchando las opiniones de la comunidad, entre otros. (En comparación, Rust hace mucho mejor en manejo de errores, genéricos, gestión de dependencias, enumeraciones, interfaces, etc.)

En general, necesitamos ver un lenguaje de manera dialéctica. Como un lenguaje de ingeniería, Go puede mejorar en gran medida el límite inferior del equipo, incluso si los desarrolladores no son muy hábiles, puede servir como red de seguridad, raramente ocurre que una manzana podrida eche a perder el cesto entero. Al mismo tiempo, debido a la sintaxis simple y la baja dificultad de aprendizaje, se puede empezar a trabajar en un proyecto muy rápidamente. Aunque Go solo ha existido por poco más de diez años, bastantes empresas ya han elegido Go como su lenguaje preferido, lo que también demuestra que Go se está volviendo gradualmente más popular.

Por cierto, Go también es un lenguaje completamente de código abierto, la comunidad y Google mantienen conjuntamente el desarrollo del lenguaje Go. La dirección oficial está en el repositorio de Google, y hay un repositorio espejo en Github. Si quieres, también puedes participar en el diseño del lenguaje.

Sitio web oficial: The Go Programming Language

Repositorio de código abierto de Google: google/go: Google Open Source

Repositorio de Github: golang/go: The Go programming language

TIP

El autor una vez envió un PR a Go. Si quieres saber cómo contribuir código a Go, puedes leer este artículo que escribí: Cómo contribuir código a Go.

Creo que muchos de ustedes han oído hablar más o menos de Rust, es un lenguaje de programación de propósito general de alto rendimiento, su fecha de nacimiento es un año anterior a Go. La versión oficial de Go1 se publicó en 2012, y la versión oficial de Rust se publicó en 2015. Ambos son lenguajes relativamente modernos. Al autor le gustan ambos lenguajes, y se desarrollan en áreas diferentes. Si no estás satisfecho con la eficiencia de ejecución y la capacidad de expresión de Go, prueba Rust, aunque su dificultad de aprendizaje está lejos de ser tan simple como la de Go.

Instalación

Descarga del lenguaje Go: Downloads - The Go Programming Language

Stable Version se refiere a las dos versiones estables que actualmente están en mantenimiento, Archived Version se refiere a las versiones históricas que ya no se mantienen. Visita Registro de actualizaciones para conocer más sobre las reglas de mantenimiento e información sobre versiones históricas.

windows

Para la plataforma Windows, hay dos tipos disponibles: installer y archive. El primero es el paquete de instalación, solo necesitas hacer clic siguiente, siguiente. Se recomienda usar el segundo, que te hará más familiar con la estructura de directorios del lenguaje Go, para que no te sientas perdido si hay problemas en el futuro. Elige descargar el archivo zip, el archivo comprimido contiene el código fuente del lenguaje Go, la cadena de herramientas y algo de documentación. Descomprímelo en la ruta especificada, luego necesitas configurar dos variables de entorno del sistema.

  • GOROOT - ruta de instalación del lenguaje Go
  • GOPATH - ruta de almacenamiento de dependencias del lenguaje Go

Después de configurar, agrega dos nuevos elementos a la variable de entorno del sistema PATH

  • %GOROOT%\bin: esta es la dirección del programa binario de go
  • %GOPATH%\bin: esta es la dirección donde se almacenarán los archivos binarios de dependencias de terceros descargados en el futuro

Ejecuta el comando go version en powershell, si se muestra la versión normalmente significa que la instalación es correcta.

powershell
PS C:\user\username> go version
go version go1.21.3 windows/amd64

Para actualizar, solo necesitas descargar el nuevo zip y sobrescribir el directorio de instalación original.

linux

Tomando Ubuntu como ejemplo, copia el enlace de la versión que deseas, descárgala localmente

sh
$ wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gz

Descomprime en el directorio especificado

sh
$ tar -C ~/go -xzf go1.21.1.linux-amd64.tar.gz

Configura las variables de entorno en el archivo $HOME/.bashrc

sh
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Después de completar, verifica la versión instalada para confirmar la instalación correcta

sh
$ go version
go version go1.21.1 linux/amd64

Para actualizar, solo necesitas descargar el nuevo tar.gz y sobrescribir el directorio de instalación original.

Gestión de Instalación

El método de instalación anterior es suficiente para el uso básico. Personalmente recomiendo usar la siguiente estructura de directorios para almacenar el lenguaje Go y sus archivos derivados

go/
|
|--root/
|  |
|  |--go1.21.3/
|  |
|  |--go1.20.10/
|
|--mod/
|  |
|  |--bin/
|  |
|  |--libs/
|
|--cache/
|
|--temp/
|
|--env

El significado es el siguiente:

  • El directorio go/root se usa para almacenar los archivos fuente de cada versión del lenguaje Go
  • go/mod corresponde a GOPATH
  • go/mod/libs corresponde a GOMODCACHE, que es la dirección de almacenamiento de dependencias de terceros descargadas
  • go/mod/bin corresponde a GOBIN, la dirección de almacenamiento de archivos binarios de dependencias de terceros
  • go/cache, corresponde a GOCACHE, almacena archivos de caché
  • go/temp, corresponde a GOTMPDIR, almacena archivos temporales
  • go/env, corresponde a GOENV, archivo de configuración de variables de entorno globales

De esta manera, al actualizar no necesitas sobrescribir el directorio de instalación original, solo necesitas almacenarlo en el directorio go/root, y luego modificar la variable de entorno del sistema GOROOT a la carpeta de la versión especificada en ese directorio. Por defecto, el archivo env lee la ruta GOROOT/env, configurando la variable del sistema GOENV para separarla de GOROOT, evitando cambios en la configuración de variables de entorno de Go debido a cambios de versión. A continuación, la configuración inicial del archivo env.

ini
GO111MODULE=on
GOCACHE=go/cache
GOMODCACHE=go/mod/libs
GOBIN=go/mod/bin
GOTMPDIR=go/temp

Este es solo un estilo de directorio que al autor le gusta. Visita Comandos - Variables de entorno para conocer más sobre las variables de entorno, puedes personalizar completamente según tus preferencias.

Gestión de Múltiples Versiones

Escribí una herramienta de gestión de múltiples versiones govm, que funciona mejor combinada con la estructura de directorios anterior. Puede gestionar múltiples versiones de Go locales, cambiar de versión en cualquier momento, y también puede buscar y descargar otras versiones de Go e instalarlas localmente.

bash
$ govm search 1.22 -n 10
go1.22.6           76 MB
go1.22.5           76 MB
go1.22.4           76 MB
go1.22.3           76 MB
go1.22.2           76 MB
go1.22.1           76 MB
go1.22.0           76 MB

$ govm install 1.22.4
Fetch go1.22.4 from https://dl.google.com/go/go1.22.4.windows-amd64.zip
Downloading go1.22.4.windows-amd64.zip 100% |████████████████████████████████████████| (76/76 MB, 32 MB/s) [2s]
Extract go1.22.4.windows-amd64.zip to local store
Remove archive from cache
Version go1.22.4 installed

$ govm use 1.22.4
Use go1.22.4 now

# Reiniciar shell
$ go version
go version go1.22.4 windows/amd64

Si quieres saber cómo escribir herramientas de línea de comandos con Go, si no te importa, puedes usar govm como referencia de proyecto, también está escrito en Go.

Editor

Actualmente, personalmente solo recomiendo los siguientes dos IDE para el lenguaje Go

  1. goland: producido por jetbrain, potente, soporte completo, pero requiere pago, puedes considerar la versión comunitaria de IDEA con plugins
  2. vscode: gratuito, el editor universal, con plugins puedes escribir en cualquier lenguaje

Si hay otros editores que se ajusten mejor a tus hábitos de uso, también puedes usarlos. Qué editor usar no es tan importante. Si solo escribes código de práctica corto, puedes probar goplay proporcionado oficialmente, que puede ejecutar código Go en línea.

TIP

Si estás usando JetBrains Toolbox, puedes probar una herramienta de línea de comandos que escribí AutoToolBox, que puede generar menús contextuales de Windows para Toolbox, el efecto es el siguiente.

Mensaje Final

La dificultad general del lenguaje Go no es alta. Si tienes experiencia con otros lenguajes, aprenderlo será muy simple. Durante el proceso de aprendizaje, si encuentras puntos difíciles que no puedes entender, puedes saltarlos primero. Aprender cualquier lenguaje primero es entender la sintaxis general y la estructura del lenguaje, y luego profundizar en características y detalles. La filosofía de este documento es la misma, es adecuado para el aprendizaje inicial. El autor es solo un estudiante ordinario, inevitablemente habrá omisiones y errores. Si encuentras algún error, puedes enviar un PR en Github. Si crees que la documentación es buena, puedes dar una Star en Github.

Si eres un desarrollador de lenguajes fuertemente OOP, como Java, C#, etc., por favor no traigas ideas OOP preconcebidas, de lo contrario encontrarás muchos de los diseños de Go incomprensibles, y será muy incómodo escribir código. Al principio, el autor también era así.

Resumen

A continuación, una breve introducción al contenido de este sitio para que puedas leer según tus necesidades. Algunas páginas están en blanco porque aún no se han actualizado.

  • Introducción al lenguaje: principalmente explica el contenido sobre el lenguaje Go en sí, más teórico.
    • Sintaxis básica: principalmente explica sintaxis muy básica, como las reglas de sintaxis de if, for, etc.
    • Sintaxis avanzada: explica algunas cosas únicas de Go, sobre módulos, pruebas, corrutinas y otros contenidos relacionados.
    • Biblioteca estándar: una breve introducción a la biblioteca estándar que viene con Go, como el contenido de la biblioteca estándar es demasiado extenso, se actualiza según disponibilidad.
    • Principios de implementación: principalmente explica algunos principios de diseño interno del lenguaje Go, como programación de corrutinas, gestión de memoria, recolección de basura, etc.
  • Ecosistema de la comunidad: principalmente explica el ecosistema alrededor de Go, más aplicativo.

Visita Preparándose para empezar para comenzar el aprendizaje inicial

Golang editado por www.golangdev.cn