Documentación
El lenguaje de programación Go es un proyecto de código abierto para hacer que los programadores sean más productivos.
Go es expresivo, conciso, limpio y eficiente. Sus mecanismos de concurrencia facilitan la escritura de programas que aprovechan al máximo las máquinas multinúcleo y en red, mientras que su novedoso sistema de tipos permite la construcción de programas flexibles y modulares. Go compila rápidamente en código de máquina pero tiene la conveniencia de la recolección de basura y el poder de la reflexión en tiempo de ejecución. Es un lenguaje compilado, rápido y de tipado estático que se siente como un lenguaje interpretado y de tipado dinámico.
Primeros pasos
Instalando Go
Instrucciones para descargar e instalar Go.
Tutorial: Primeros pasos
Un breve tutorial de Hola Mundo para comenzar. Aprende un poco sobre el código, las herramientas, los paquetes y los módulos de Go.
Tutorial: Crear un módulo
Un tutorial de temas breves que presentan funciones, manejo de errores, arrays, maps, tests unitarios y compilación.
Tutorial: Primeros pasos con espacios de trabajo de múltiples módulos ⬀
Presenta los conceptos básicos de la creación y el uso de espacios de trabajo de múltiples módulos en Go. Los espacios de trabajo de varios módulos son útiles para realizar cambios en varios módulos.
Tutorial: Desarrollando una API RESTful con Go y Gin ⬀
Presenta los conceptos básicos para escribir una API de servicio web RESTful con Go y Gin Web Framework.
Tutorial: Empezando con los generics ⬀
Con los generics, puedes declarar y usar funciones o tipos que están escritos para funcionar con cualquiera de un conjunto de tipos proporcionados mediante el código de llamada.
Tutorial: Empezando con el fuzzing ⬀
Fuzzing puede generar entradas para tus tests que pueden detectar casos extremos y problemas de seguridad que quizás hayas pasado por alto.
Escribir aplicaciones web ⬀
Crear una aplicación web sencilla.
Cómo escribir código Go ⬀
Este documento explica cómo desarrollar un conjunto simple de paquetes Go dentro de un módulo y muestra cómo usar el go
(comando) ⬀ para crear y probar paquetes.
Un Tour de Go ⬀
Una introducción interactiva a Go en cuatro secciones. La primera sección cubre la sintaxis básica y las estructuras de datos; el segundo analiza métodos e interfaces; el tercero trata sobre generics; y el cuarto presenta las primitivas de concurrencia de Go. Cada sección concluye con algunos ejercicios para que puedas practicar lo que has aprendido. Puedes realizar el tour en línea ⬀ o instalarlo localmente con:
$ go install golang.org/x/website/tour@latest
Esto colocará el binario tour
en tu GOPATH ⬀, en el directorio bin
.
Usar y entender Go
Go efectivo ⬀
Un documento que brinda consejos para escribir código Go claro e idiomático. Una lectura obligada para cualquier programador nuevo de Go. Complementa el tour y la especificación del lenguaje, los cuales deben leerse primero.
Preguntas Frecuentes (FAQ) ⬀
Respuestas a preguntas comunes sobre Go.
Editor de plugins e IDE ⬀
Un documento que resume los plugins de editor e IDE de uso común compatibles con Go.
Diagnóstico ⬀
Resume herramientas y metodologías para diagnosticar problemas en programas Go.
Una guía para el recolector de basura de Go ⬀
Un documento que describe cómo Go administra la memoria y cómo aprovecharla al máximo.
Administrar dependencias ⬀
Cuando tu código usa paquetes externos, esos paquetes (distribuidos como módulos) se convierten en dependencias.
Fuzzing
Página de documentación principal de Go fuzzing.
Cobertura para aplicaciones Go ⬀
Página principal de documentación para tests de cobertura de aplicaciones Go.
Optimización guiada por perfil ⬀
Página de documentación principal para la optimización guiada por perfil (PGO) de aplicaciones Go.
Referencias
Documentación de paquetes ⬀
La documentación de la biblioteca estándar de Go.
Documentación de comandos ⬀
La documentación de las herramientas de Go.
Especificación del lenguaje ⬀
La especificación oficial del lenguaje Go.
Referencia de módulos de Go ⬀
Un manual de referencia detallado para el sistema de gestión de dependencias de Go.
Referencia del archivo go.mod ⬀
Referencia de las directivas incluidas en un archivo go.mod.
El modelo de de memoria de Go ⬀
Un documento que especifica las condiciones bajo las cuales se puede garantizar que las lecturas de una variable en una rutina observen los valores producidos por las escrituras en la misma variable en una rutina diferente.
Guía de Contribuciones ⬀
Contribuir a Go.
Historial de versiones ⬀
Un resumen de los cambios entre las versiones de Go.
Acceder a bases de datos
Tutorial: Accediendo a una base de datos relacional ⬀
Presenta los conceptos básicos para acceder a una base de datos relacional usando Go y el paquete database/sql
en la biblioteca estándar.
Acceder a bases de datos relacionales ⬀
Una descripción general de las funciones de acceso a datos de Go.
Abrir un identificador de base de datos ⬀
Utilizas el identificador Go de la base de datos para ejecutar operaciones de base de datos. Una vez que abres un identificador con propiedades de conexión de base de datos, el identificador representa un grupo de conexiones que administra en tu nombre.
Ejecutar sentencias SQL que no devuelven datos ⬀
Para operaciones SQL que podrían cambiar la base de datos, incluidas SQL INSERT
, UPDATE
y DELETE
, utiliza métodos Exec
.
Consulta de datos ⬀
Para declaraciones SELECT
que devuelven datos de una consulta, utiliza el método Query
o QueryRow
.
Usar declaraciones preparadas ⬀
Definir una declaración preparada para uso repetido puede ayudar a que tu código se ejecute un poco más rápido al evitar la sobrecarga de recrear la declaración cada vez que tu código realiza la operación de base de datos.
Ejecutar transacciones ⬀
sql.Tx
exporta métodos que representan la semántica específica de la transacción, incluidos Commit
y Rollback
, así como los métodos que utiliza para realizar operaciones comunes de bases de datos.
Cancelar operaciones de base de datos en progreso ⬀
Usando context.Context, puedes hacer que las llamadas a funciones y los servicios de tu aplicación dejen de trabajar antes de tiempo y devuelvan un error cuando ya no sea necesario su procesamiento.
Administrar conexiones ⬀
Para algunos programas avanzados, es posible que necesites ajustar los parámetros del grupo de conexiones o trabajar con conexiones explícitamente.
Evitar el riesgo de inyección SQL ⬀
Puedes evitar el riesgo de inyección SQL proporcionando valores de parámetros SQL como argumentos de función del paquete sql
.
Desarrollar módulos
Desarrollo y publicación de módulos ⬀
Puedes recopilar paquetes relacionados en módulos y luego publicar los módulos para que los utilicen otros desarrolladores. Este tópico ofrece una descripción general del desarrollo y publicación de módulos.
Lanzamiento del módulo y flujo de trabajo versionado ⬀
Cuando desarrollas módulos para que los utilicen otros desarrolladores, puedes seguir un flujo de trabajo que ayuda a garantizar una experiencia confiable y consistente para los desarrolladores que usan el módulo. Este tópico describe los pasos de alto nivel en ese flujo de trabajo.
Administrar la fuente del módulo ⬀
Cuando desarrollas módulos para publicarlos para que otros los usen, puedes ayudar a garantizar que tus módulos sean más fáciles de usar para otros desarrolladores siguiendo las convenciones de repositorio descritas en este tópico.
Organizar un módulo Go ⬀
¿Cuál es la forma correcta de organizar los archivos y directorios en un proyecto tópico de Go? En este tema se analizan algunos diseños comunes según el tipo de módulo que tenga.
Desarrollando una actualización de versión importante (major version) ⬀
Una actualización de versión mayor (major) puede ser muy perjudicial para los usuarios de tu módulo porque incluye cambios importantes y representa un módulo nuevo. Obtén más información en este tema.
Publicar un módulo ⬀
Cuando quieres que un módulo esté disponible para otros desarrolladores, lo publicas para que sea visible para las herramientas Go. Una vez que hayas publicado el módulo, los desarrolladores que importen tus paquetes podrán resolver una dependencia en el módulo ejecutando comandos como go get
.
Numeración de versiones de módulos ⬀
El desarrollador de un módulo usa cada parte del número de versión de un módulo para indicar la estabilidad y compatibilidad con versiones anteriores de la versión. Para cada nueva versión, el número de versión de un módulo refleja específicamente la naturaleza de los cambios del módulo desde la versión anterior.
Charlas
Un recorrido en video por Go
Tres cosas que hacen que Go sea rápido, divertido y productivo: interfaces, reflexión y concurrencia. Construye un rastreador web de juguete para demostrarlos.
Código que crece con gracia
Uno de los objetivos de diseño clave de Go es la adaptabilidad del código; que debería ser fácil tomar un diseño simple y construir sobre él de una manera limpia y natural. En esta charla, Andrew Gerrand describe un servidor de "ruleta de chat" simple que relaciona pares de conexiones TCP entrantes y luego utiliza los mecanismos de concurrencia, las interfaces y la biblioteca estándar de Go para ampliarlo con una interfaz web y otras características. Si bien la función del programa cambia drásticamente, la flexibilidad de Go preserva el diseño original a medida que crece.
Patrones de Concurrencia en Go
La concurrencia es la clave para diseñar servicios de red de alto rendimiento. Las primitivas de concurrencia de Go (gorrutinas y channels) proporcionan un medio simple y eficiente para expresar la ejecución concurrente. En esta charla veremos cómo los complicados problemas de concurrencia se pueden resolver elegantemente con un simple código Go.
Patrones de concurrencia avanzados de Go
Esta charla amplía la charla sobre los Patrones de concurrencia de Go para profundizar en las primitivas de concurrencia de Go.
Más
Consulta el sitio de Go Talks y la página wiki ⬀ para obtener más charlas sobre Go.
Codewalks
Tours guiados a los programas de Go.
- Funciones de primera clase en Go ⬀
- Generación de texto arbitrario: un algoritmo de cadena de Markov ⬀
- Comparte Memoria Comunicándote ⬀
Lenguaje
- JSON-RPC: una historia de interfaces ⬀
- Sintaxis de declaración de Go ⬀
- Defer, Panic, y Recover ⬀
- Patrones de concurrencia de Go: tiempo de espera, seguir adelante ⬀
- Go Slices: uso y aspectos internos ⬀
- Un decodificador GIF: un ejercicio en interfaces Go ⬀
- Manejo de errores y Go ⬀
Paquetes
- JSON y Go ⬀ - usando paquete json ⬀.
- Gobs de datos ⬀ - el diseño y uso del Paquete gob ⬀ .
- Las leyes de la reflexión ⬀ - los fundamentos del paquete reflect ⬀.
- El paquete de imágenes de Go ⬀ - los fundamentos del paquete image ⬀.
- El paquete Go image/draw ⬀: los fundamentos del paquete image/draw ⬀ .
Módulos
- Uso de módulos en Go ⬀ - una introducción al uso de módulos en un proyecto sencillo.
- Migración a módulos Go ⬀ - convertir un proyecto existente para utilizar módulos.
- Publicar módulos Go ⬀ - cómo crear nuevas versiones de módulos disponibles para otros.
- Módulos Go: v2 y más allá ⬀ - creación y publicación versiones major 2 y superiores.
- Mantener tus módulos compatibles ⬀ - cómo mantener tus módulos compatibles con versiones menores/de parche anteriores.
Herramientas
- Acerca del comando Go ⬀ - por qué lo escribimos, qué es, qué no es y cómo utilizarlo.
- Comentarios Doc de Go ⬀ - escribir buena documentación para programas
- Depurar Go Code con GDB ⬀
- Data Race Detector ⬀ - un manual para el detector de carreras de datos.
- Guía rápida para el ensamblador de Go ⬀ - una introducción al ensamblador utilizado por Go.
- ¿C? ¿Go? ¡Cgo! ⬀ - vinculación con código C con cgo ⬀.
- Profiling programas Go ⬀
- Presentación del Go Race Detector ⬀ - una introducción al detector de carreras.
Wiki
La Wiki de Go ⬀, mantenida por la comunidad Go, incluye artículos sobre el lenguaje Go, herramientas y otros recursos.
Consulta la página Learn ⬀ en la Wiki ⬀ para obtener más recursos de aprendizaje de Go.