Lenguaje de Programación Go

Aleksandr Shitik
Aleksandr Shitik

Escribo mis propios posts y libros, y hago reseñas de películas y libros. Experto en cosmología y astronomía, informática, productividad y planificación.

Lenguaje de Programación Go
Alan A. A. Donovan, Brian W. Kernighan
Géneros: Programación
Año de publicación: 2016
Año de lectura: 2020
Mi calificación: Máxima
Número de lecturas: 1
Páginas totales: 436
Resumen (páginas): 0
Idioma original de la publicación: Inglés
Traducciones a otros idiomas: Ruso, Portugués, Chino

Primero analizaré brevemente la estructura del libro por capítulos, luego escribiré una conclusión, y enumeraré los pros y los contras del libro.

Libro de texto

Este es un capítulo introductorio sobre el lenguaje Go. Se habla del origen del lenguaje, se da un ejemplo de hello world, se revisa la ejecución y compilación, el concepto de módulos (paquetes), declaración de funciones, formato del código, trabajo con argumentos de línea de comandos, declaración de variables y una breve introducción a for. También se analiza la búsqueda de líneas duplicadas de varias maneras, el trabajo con imágenes y URL, e incluso la creación de un servidor web primitivo.

Estructura del programa

Se analizan las palabras reservadas, la nomenclatura de variables, funciones y constantes. Se describe cómo declarar variables (usando var, const, type, func), qué partes se pueden omitir y cómo agrupar múltiples declaraciones. Se tratan detalladamente los punteros y la creación de variables mediante la función new. Se aborda el ciclo de vida y el alcance de las variables, así como la asignación de valores. También se muestra el uso de paquetes externos, su importación y la encapsulación de datos.

Tipos de datos fundamentales

Se examinan los números (enteros, de coma flotante), operadores binarios y bit a bit y su precedencia, comparación de números. Se describe el trabajo con números complejos en Go, valores booleanos. Se explican las cadenas, secuencias de escape y literales de cadena, y runas — para trabajar con caracteres Unicode. Se muestra cómo convertir cadenas a números y viceversa. También se tratan las constantes y los pseudo-enums.

Tipos de datos compuestos

Aquí se trata de tipos de datos más complejos: arreglos (secuencias de longitud fija), slices (secuencias dinámicas), mapas (colecciones clave-valor) y estructuras. Se analiza la creación, inicialización, comparación y funciones principales para trabajar con arreglos y slices. Se dan varios ejemplos de uso de mapas. Las estructuras se tratan con detalle, incluyendo el trabajo con JSON y el uso de las funciones Marshal y Unmarshal. Para finalizar — un ejemplo de trabajo con HTML mediante Go.

Funciones

Una sección bastante detallada sobre funciones. Al principio hay teoría, luego un ejemplo de procesamiento HTML recursivo. Se explica la devolución de múltiples valores y uno de los conceptos clave del lenguaje — la verificación de errores con if err != nil. Se analizan a fondo las funciones anónimas y las funciones variádicas (que aceptan un número variable de argumentos).

Métodos

Como Go no tiene un modelo clásico de POO, el trabajo con objetos se realiza mediante estructuras y métodos (funciones asociadas a estructuras). Se abordan los conceptos de encapsulación y se muestra cómo resolver una misma tarea tanto con una función normal como con un método.

Interfaces

Un capítulo sobre la creación y uso de interfaces. Primero se presenta la teoría, explicando el propósito de las interfaces y cómo se implementan. De las interfaces estándar, se consideran las de ordenación, trabajo con servidores web y manejo de errores. También se abordan los temas de declaración de tipos y manejo de situaciones críticas. Si antes hubo un ejemplo con JSON, aquí se analiza el trabajo con XML.

Goroutines y canales. Paralelismo

Siguen dos capítulos dedicados a la programación concurrente. El primero se enfoca más en la teoría y ejemplos, incluyendo el tema fundamental de Go — los canales (incluidos los canalizados y unidireccionales) y la construcción select.

El segundo capítulo tiene menos ejemplos, pero se enfoca en los problemas que pueden surgir con la concurrencia (como las condiciones de carrera) y cómo resolverlos (usando sync.Mutex y sync.RWMutex).

Paquetes y herramientas de Go

Aunque el lector ya está familiarizado con los conceptos de paquetes y módulos, aquí se les presta más atención. Se analizan en detalle las importaciones, destacando la posibilidad de usar bibliotecas de terceros además de las estándar.

La segunda parte del capítulo está dedicada a las herramientas de Go: compilación, instalación de paquetes y dependencias, pruebas y mucho más. También se describe la organización del entorno de trabajo y la estructura de directorios.

Pruebas

Uno de los últimos capítulos está dedicado a las pruebas de código usando las herramientas de Go (go test), brevemente mencionadas en el capítulo anterior. Se mencionan bibliotecas externas para pruebas. Por lo demás, es un capítulo típico: por qué son necesarias las pruebas, cómo escribirlas bien o mal, qué son las pruebas frágiles, la cobertura del código y más.

Reflexión y programación de bajo nivel

Dos capítulos finales, los más cortos. Están orientados a desarrolladores más experimentados. El primero — sobre reflexión: por ejemplo, si se necesita crear un analizador estático o una herramienta de análisis de código. El segundo — sobre programación de bajo nivel: cuando las capacidades de Go no son suficientes y se requiere recurrir a bibliotecas en C o llamadas al sistema operativo.

Conclusión

¿Para quién es este libro?

Es adecuado tanto para quienes desean iniciarse en el lenguaje desde cero, como para quienes ya trabajan con Go desde hace algunos años y quieren sistematizar, reforzar y profundizar sus conocimientos.

Ventajas:

  • Fácil y claro de leer.
  • Estructura lógica: cada capítulo continúa el anterior de manera coherente.
  • Muchos ejemplos de código.
  • Ejercicios prácticos después de cada capítulo.

Desventajas:

  • No estoy seguro de si hubo actualizaciones del libro, pero al momento de la lectura no se cubrían algunas funciones nuevas del lenguaje como los genéricos.
  • El libro tiene más de 400 páginas, lo cual puede ser una barrera para quienes no están acostumbrados a leer literatura técnica de ese tamaño.
Вверх