13.6defer
13.7Entrando en pánico
13.8Función panic
13.9Función recover
CAPÍTULO 14.ENTRADA Y SALIDA
Flujos de datos
14.1Interfaces io.Writer e io.Reader
14.2Archivos de disco
14.3Entrada y salida formateada
14.4Paquete bufio
14.5Paquete ioutil
CAPÍTULO 15.PARALELISMO Y CONCURRENCIA
Gorrutinas
15.1Un poco de historia
15.2Gorrutinas
15.3Sincronización mediante sync.WaitGroup
15.4Problemas de concurrencia: condiciones de carrera
15.5Sincronización mediante sync.Mutex
15.5.1sync.RWMutex
15.6Sincronización mediante atomic
15.7Conclusiones: ¿cuándo y cómo sincronizar gorrutinas?
CAPÍTULO 16.CANALES
16.1Creación, uso y cierre
16.2Canales solo de lectura y de escritura
16.3Bloqueo en la escritura: canales con o sin búfer
16.4Iterando canales con for
16.5Múltiples receptores
16.6Sincronización mediante canales
16.7Demultiplexión con select
16.8Cancelando lecturas después de un tiempo de espera
16.9Cancelando tareas mediante contextos
CAPÍTULO 17.SERVICIOS WEB
17.1HTTP explicado en 3 minutos
17.2REST explicado en 3 minutos
17.3Creación de un servicio HTTP en Go
17.3.1Interfaz http.Handler
17.3.2Funciones http.ListenAndServe y http.ListenAndServeTLS
17.3.3Ejemplo de servidor HTTP
17.4Creación de un cliente HTTP en Go
17.4.1Ejemplo de cliente HTTP
17.5Ejemplo práctico de servicio REST
17.5.1Probando el servicio REST
CAPÍTULO 18.SERIALIZACIÓN DE DATOS
18.1Serialización de tipos Go a JSON
18.2Deserialización de JSON a tipos Go
18.3Serializando y deserializando documentos JSON sin formato
18.4Serialización de porciones y arrays
18.5Serialización y deserialización en otros formatos
CAPÍTULO 19.CONEXIÓN A BASES DE DATOS SQL
19.1Carga de controlador
19.2Abriendo una base de datos
19.3Modificando la base de datos
19.4Consultando datos
19.5Declaraciones preparadas
19.6Transacciones
19.7Reserva de conexiones
CAPÍTULO 20.PRUEBAS AUTOMATIZADAS DE SOFTWARE
20.1Código a probar: la función Factorial
20.2El paquete testing
20.3Probando servicios HTTP
20.4Pruebas de rendimiento
20.5Cobertura de las pruebas
Go es el lenguaje de moda entre informáticos. Sin duda, es uno de los lenguajes de programación que durante la última década han ganado más impulso entre los programadores de diversas disciplinas. Pese a ser un lenguaje relativamente “joven”, no ha tardado en hacerse con una legión, ya no de adeptos, sino de auténticos fans.
Son muchas las causas del éxito de Go:
• Es versátil.Combina características de los lenguajes de bajo nivel, como C++, con características de lenguajes dinámicos, como Python o Ruby. Esto hace de Go un lenguaje tan idóneo para software de sistema (controladores, comandos de sistema, agentes de monitorización, incluso programación de sistemas embebidos gracias a la implementación de tinygo.org) como para la creación de grandes aplicaciones web y sistemas de servicios distribuidos.
• Es rápido.Es un lenguaje cuyos ejecutables se distribuyen en código nativo, sin necesidad de máquinas virtuales o intérpretes de lenguaje. Compila las técnicas de optimización más vanguardistas.
• Es compacto.Genera ejecutables pequeños que incluyen todo el código necesario, sin necesidad de bibliotecas externas o entornos de ejecución extra.
• Es muy rápido compilando.Está enfocado hacia las tendencias actuales de integración y despliegue continuo de aplicaciones, mediante las cuales el software está en continua actualización. Hoy, el tiempo de compilación es una métrica clave para la productividad de los equipos de desarrollo.
• Es seguro.A diferencia de otros lenguajes como C o C++, donde un apuntador a memoria “desbocado” puede suponer un grave fallo de seguridad, Go comprueba la seguridad de los accesos a memoria de tal manera que un usuario malintencionado lo tendrá mucho más difícil para encontrar fallos de seguridad explotables.
• Es sencillo.Los equipos de desarrollo modernos pasan muchas horas revisando código de sus compañeros, con tal de reforzar unos estándares de calidad altos. Go es un lenguaje diseñado para ser fácil de leer y entender, lo cual incentiva unas prácticas y estilos globales y unificados, y evita proveer múltiples soluciones para una misma tarea.
• Es completo.La distribución estándar de Go proporciona casi todas las herramientas que un profesional necesita: gestores de dependencias, analizadores de rendimiento, formateadores y analizadores de código, depuradores, gestión de la documentación, una enorme biblioteca estándar de funcionalidades, etc.
• Es código abierto.El código de todas las herramientas oficiales de Go, así como su librería estándar, es abierto y libre de modificar y distribuir. Además, sus bibliotecas de terceros también son código abierto.
Este libro pretende ser un punto tanto de contacto como de profundización en el lenguaje de programación Go. Está destinado tanto a personas con conocimientos básicos de programación como a profesionales con experiencia que quieran adentrarse en los paradigmas y filosofía de un nuevo lenguaje.
En ningún caso es una introducción a la programación para personas que nunca hayan programado, ni un curso de algoritmia básica. No obstante, muchos de los conceptos que se presentan se explican brevemente, de manera que todo el mundo pueda entenderlos.
Si usted es un programador experto, podrá sacar buen provecho de este libro, ya que no se limita a explicar las estructuras básicas de programación adaptadas a la sintaxis de Go, sino también su filosofía y los nuevos conceptos que hacen de Go un lenguaje único y especial.
Este libro no pretende ser un manual de referencia técnico, ni un compendio de todas las bibliotecas y funciones estándar de Go. Para ese cometido ya existe la documentación oficial. Este libro pretende ser una introducción ágil —sin descuidar la profundización— a las herramientas y características que le permitirán escribir programas en Go de manera productiva, en un breve periodo de tiempo.
Como autor, humildemente —pero no por ello sin ambición—, pretendo que este libro sea la herramienta que a mí me hubiera gustado tener para agilizar mi transición profesional de programador en C y Java hacia el lenguaje Go.
Читать дальше