# Programación en Go

Go es un lenguaje de programación concurrente y compilado que se inspira en la sintaxis de C desarrollado por Robert Griesemer, Rob Pike y Ken Thompson e impulsado por Google desarrollado desde 2007 y publicado en 2011. Aunque tiene muchas similitudes con los lenguajes basados en C, tiene influencia de Pascal, Modula, Oberon y Limbo. Lo que más destaca a Go es que cuenta con un recolector de basura automático que gestiona de forma eficiente la memoria y reduce el consumo innecesario de la misma.
Si estás al tanto de las nuevas tecnologías seguramente has escuchado de Docker que es un contenedor de aplicaciones. Pues esta plataforma para contener y gestionar ambientes y aplicaciones especialmente en la nube fue desarrollado en Go.
Las posibilidades del lenguaje han motivado a desarrolladores de todo el mundo a utilizarlo para sus proyectos. La simplicidad, optimización y multifuncionalidad son la principal motivación que ha guiado el desarrollo de este lenguaje que, aunque relativamente joven, ha superado a muchos otros lenguajes de programación en eficiencia debido a que combina la facilidad de programación de los lenguajes interpretados y la seguridad de los lenguajes compilados. Algunas de las características que distinguen a Go son las siguientes:
* Sistema de tipos expresivo que clasifica eficientemente objetos.
* Concurrencia (cálculos simultáneos), que permite una ejecución muy rápida de los programas.
* Recolector de basura (Garbage Collector), que optimiza el uso de memoria para evitar problemas de espacio como los que surgen en otros lenguajes de programación como Java.
* Estricta especificación de dependencias.
* Compilación multiplataforma que permite su desarrollo en cualquier sistema.

## Ventajas y desventajas de Go
### Ventajas

* Una vez aprendidos los conceptos básicos, es fácil aprovechar la facilidad de uso, mecanismos automatizados y multifuncionalidad de Go.
* Excelente rendimiento y velocidad de ejecución de los programas.
* Muy buena optimización de memoria y uso del espacio en forma automática que facilita su uso y ejecución en servidores pequeños.
* Estabilidad y buen rendimiento en respuesta a peticiones HTTP.
* Sintaxis simplificada.
* Importación de dependencias sencilla.
* Corrección de código automático (gofmt).
* Concurrencia.

### Desventajas

* No soporta tipos de datos genéricos.
* Oferta limitada de bibliotecas.
* La asimilación del lenguaje desde lenguajes como Java, C# o PHP requiere esfuerzo.
* Poca disponibilidad de manuales de uso (hasta el momento).

## ¿Para quién es este libro?

Este libro está dirigido a todos los que deseen aprender este lenguaje para casi cualquier tipo de desarrollo de forma libre como alternativa. Debido al extraordinario rendimiento que se refleja en los desarrollos con este lenguaje, este libro va dirigido a aquellos que deseen iniciar proyectos en el ámbito de los negocios y los servidores, en este último debido a su muy excelente optimización de memoria.

### ¿Por qué este manual?

Justamente por la poca disponibilidad de manuales que actualmente hay sobre Go, este manual se hace con el objetivo de dar bases técnicas para iniciarse en el desarrollo con este lenguaje y ofrecer un buen compendio de información documentada sobre el uso del lenguaje, funcionalidades y frameworks.

## Índice de contenidos
### Básico

* Instalación y prueba
* Fundamentos de programación
* Primer programa en Go
** Compilación en Go
* Variables
* Cadenas
* Operadores
* Tipos de datos
* Estructuras de control
** Estructura condicional if...else
** Estructura condicional switch...case
** Bucle for
** Bucle while
** Bucle do...while
* Funciones
* Vectores
* Fecha y hora

### Medio

* Listas
* Algoritmos y Estructuras de Datos
** Ordenamiento de datos
* Manejo de archivos
* Expresiones regulares
* Conexiones a bases de datos

### Avanzado

* Conexiones a bases de datos NoSQL
* Consumo de servicios
** REST
** SOAP
* Sockets

## Enlaces externos

* Your Basic: Sitio web de conocimientos básicos.
* GO: Sitio web oficial del lenguaje.
* Documentación: Documentación oficial de Go.
* GitHub: Repositorio oficial del desarrollo del lenguaje.