Actualizado el 9 de Junio del 2020 (Publicado el 26 de Enero del 2018)
1.577 visualizaciones desde el 26 de Enero del 2018
239,0 KB
54 paginas
Creado hace 9a (10/03/2016)
Sobre este Libro
Licencia
El Pequeño Libro de Go (The Little Go Book) posee una licencia Attribution-NonCommercial-ShareAlike 4.0 Internacional.
No deberías haber pagado por este libro.
Eres libre de copiar, distribuir, modificar o mostrar el libro. Sin embargo, te pido que siempre me atribuyas la autoría
del libro a mí, Karl Seguin, y la traducción a Raúl Expósito, y que no lo utilices con fines comerciales.
Puedes leer el texto completo de la licencia en:
http://creativecommons.org/licenses/by-nc-sa/4.0/
Última Versión
La última versión del código fuente de este libro puede encontrarse en: http://github.com/raulexposito/the-little-go-book
1
Introducción
Siempre he vivido una relación de amor-odio cuando se trata de aprender nuevos lenguajes. Por una parte, los lenguajes
son tan fundamentales en lo que hacemos que incluso pequeños matices pueden provocar un impacto considerable.
Ese momento ajá que se produce cuando algo encaja puede tener un efecto perdurable en nuestra forma de programar
y puede redefinir nuestras expectativas en otros lenguajes. Por contra, el aprender nuevos lenguajes es algo que no
termina nunca. Aprender nuevas palabras reservadas, tipos de datos, estilos de programación y descubrir librerías,
comunidades y paradigmas supone un montón de trabajo a priori difícil de justificar. Comparados con cualquier otra
cosa que tengamos que aprender, los nuevos lenguajes a menudo parecen ser una mala inversión de nuestro tiempo.
Dicho esto, tenemos que seguir adelante. Tenemos que dar los pasos porque, de nuevo, los lenguajes son el elemento
principal de lo que hacemos. Aunque el aprendizaje sea continuo e infinito, éste ayuda a ampliar nuestra visión e
impacta en nuestra productividad, la legibilidad de nuestro código, el rendimiento, la testeabilidad, la forma en la que
gestionamos dependencias, la gestión de errores, la documentación, el profiling, nuestra presencia en comunidades,
nuestro conocimiento de librerías estándar, y mucho más. ¿Hay alguna manera positiva de decir la sarna con gusto no
pica?
Todo esto nos deja con una pregunta importante: ¿Por qué Go? Para mí hay dos motivos convincentes: el primero
es que es un lenguaje relativamente sencillo con una librería estandar relativamente simple. Go tiene la naturaleza de
simplificar la complejidad que hemos visto incluida en los lenguajes de programación en el último par de décadas medi-
ante el uso de varios mecanismos. El otro motivo es que para muchos desarrolladores puede servir como complemento
para su arsenal.
Go fue construido para ser utilizado como un lenguaje orientado a software de sistemas (es decir, sistemas operativos,
drivers de dispositivos), lo cual animó a desarrolladores de C y C++. Según el equipo de Go, y según la percepción
que yo también tengo, los desarrolladores de aplicaciones, y no los desarrolladores de software de sistemas, se han
convertido en los principales usuarios de Go. ¿Por qué? No puedo hablar con autoridad acerca de los desarrolladores de
software de sistemas, pero para todos aquellos que construimos aplicaciones web, servicios, aplicaciones de escritorio
y software por el estilo, nos ha cubierto la necesidad de disponer de algo que nos permita desarrollar aplicaciones de
bajo y de alto nivel.
Quizá sea la mensajería, las cachés, los análisis de datos computacionalmente muy costosos, los interfaces por línea
de comandos, los logs o la monitorización. No sé cómo etiquetarlo, pero a lo largo de mi vida laboral el software de
sistemas ha ido creciendo en complejidad. Es posible construir estos sistemas con Ruby o Python o alguna otra cosa
(como mucha gente hace), pero ese tipo de software puede beneficiarse de un sistema con un tipado rígido que brinde
mejor rendimiento. Del mismo modo, puedes usar Go para construir aplicaciones web (como mucha gente hace),
aunque yo todavía prefiero, con mucho margen, la expresividad de Node o Ruby para este tipo de desarrollos.
Hay otras áreas en las que Go es excelente. Por ejemplo, no existen dependencias a la hora de ejecutar programas
compilados con Go. No hay que preocuparse sobre si los usuarios tienen Ruby o la JVM instalada o, si la tienen, qué
versión tendrán. Por este motivo Go se está convirtiendo en un lenguaje popular con el que desarrollar aplicaciones de
línea de comandos u otro tipo de programas de utilidades que necesiten ser distribuibles (por ejemplo, un recolector
de log).
Hablando claramente, aprender Go es hacer un uso eficiente de tu tiempo. No es necesario invertir muchas horas para
aprender o incluso dominar Go, y obtendrás algo práctico de tu esfuerzo.
2
Una Nota del Autor
He dudado sobre si escribir este libro o no por un par de motivos. El primero es que la propia documentación de Go,
en particular Effective Go, es buena.
El otro es mi malestar por escribir un libro sobre un lenguaje de programación. Cuando escribí El Pequeño Libro de
MongoDB podia dar por supuesto que la mayoría de los lectores entendían los conceptos básicos de bases de datos
relaciones así como su modelado. Con El Pequeño Libro de Redis podía asumir que el lector estaba familiarizado con
los conceptos de clave-valor y empezar por ahí.
Cuando pienso en los párrafos y capítulos que vienen adelante sé que no puedo hacer esas presunciones. ¿Cuánto
tiempo será necesario utilizar para hablar sobre interfaces sabiendo que para algunos el concepto será nuevo, mientras
que otros no necesitan saber más que que Go tiene interfaces? Me tomaré la libertad de pensar que me vas a hacer
saber si algunas partes son demasido superficiales mientras que otras entran demasiado en detalle. Considéralo el
precio a pagar por tener este libro.
3
Comenzando
Si buscas jugar un poco con Go deberías probar el Go Playground, el cual te permite ejecutar código en el navegador
sin tener que instalar nada. Esta es, además, la forma más común de compartir código escrito en Go al pedir ayuda
en los foros de Go y en lugares como StackOverflow.
La instalación de Go es bastante directa. Lo puedes instalar desde el código fuente, pero te aconsejo que utilices los
binarios precompilados. Cuando vayas a la página de descargas verás instaladores para varias plataformas. Vamos a
pasar de ellos y a aprender cómo instalar Go por nosotros mismos. Como verás no es difícil.
Excepto para los ejemplos sencillos, Go ha sido diseñado para funcionar siempre que tu código esté dentro de un
workspace. El workspace es un directorio formado por los subdirectorios bin, pkg y src. Puede que estés tentado a
forzar a Go a usar tu propio estilo - no lo hagas.
Por lo general coloco mis proyectos dentro de ~/code. Por ejemplo, ~/code/blog contiene mi blog. Para Go, mi
workspace es ~/code/go y mi blog vitaminado con Go debe estar en ~/code/go/src/blog. Ya que hay mucho que
escribir utilizo un enlace simbólico para poder acceder directamente desde ~/code/blog:
ln -s ~/code/go/src/blog ~/code/blog
Para resumir, crea un directorio go con un subdirectorio src donde vayas a dejar tus proyectos,
OSX / Linux
Descarga el fichero tar.gz de tu plataforma. Para OSX, el que más te interesa es go#.#.#.darwin-amd64-osx10
.8.tar.gz, donde #.#.# es la última versión de Go.
Descomprime el fichero en /usr/local con el comando tar -C /usr/local -xzf go#.#.#.darwin-amd64-osx10
.8.tar.gz.
Configura dos variables de entorno:
1. GOPATH debe apuntar a tu workspace, para mí es $HOME/code/go.
2. Necesitamos añadir el binario de Go en nuestro PATH.
Para hacer esto desde la terminal lanzamos los comandos:
echo 'export GOPATH=$HOME/code/go' >> $HOME/.profile
echo 'export PATH=$PATH:/usr/local/go/bin' >> $HOME/.profile
Necesitarás activar ambas variables. Para ello puedes cerrar y reabrir tu terminal o puedes ejecutar el comando
source $HOME/.profile.
Escribe go version y tendrás una salida del estilo a go version go#.#.# darwin/amd64.
4
Windows
Descarga la última versión del fichero en formato zip. Si tu máquina es x64 necesitarás bajar go#.#.#.windows-
amd64.zip, donde #.#.# es la última versión de Go.
Descomprímelo en el directorio que prefieras. c:\Go es una buena elección.
Configura dos variables de entorno:
1. GOPATH debe apuntar a tu workspace. Deberá ser algo del estilo c:\users\goku\work\go.
2. Añade c:\Go\bin en tu variable de entorno PATH.
Las variables de entorno se pueden configurar a través del botón Variables de entorno de la pestaña Avanzado
de la opción Sistema del panel de control. Esto puede variar según la versión de Windows.
Abre un terminal y escribe go version. Si todo ha ido bien tendrás una salida del estilo go version go#.#.#
windows/amd64.
5
Capítulo 1 - Lo Básico
Go es un lenguaje compilado y estáticamente tipado, con una sintaxis similar a la de C y recolección de basura. ¿Qué
significa todo esto?
Compilación
La compilación es el proceso de traducir el código fuente que escribas en un lenguaje de más bajo nivel – puede ser
ensamblador (como en el caso de Go) u otro tipo de lenguaje intermedio (como en el caso de Java o C#)
Trabajar con lenguajes compilados puede ser poco gratificante ya que el proceso de compilación puede ser lento.
Es difícil iterar rápidamente cuando tienes que esperar minutos u horas a que el código compile. La velocidad de
compilación es una de las principales metas en el diseño de Go, lo cual es una buena noticia tanto para los que trabajan
con proyectos grandes como para aquellos que estamos acostumbrados a tener el feedback inmediato que ofrecen los
lenguajes interpretados.
Los lenguajes compilados suelen ser más rápidos y los ejecutables pueden funcionar sin depedencias adicionales (al
menos esto es cierto para lenguajes como C, C++ y Go, los cuales compilan directamente en ensamblador)
Estáticamente Tipado
Estar tipado estáticamente implica que las variables deben ser de un tipo específico (int, string, bool, []byte, etc). Esto
se consigue indicando el tipo a la hora de definir la variable o, en muchos
Comentarios de: The litte go book (0)
No hay comentarios