Entendiendo el GOPATH

Introducción

Este artículo le guiará a través de la comprensión de lo que es el GOPATH, cómo funciona, y cómo configurarlo. Este es un paso crucial para configurar un entorno de desarrollo Go, así como para entender cómo Go encuentra, instala y construye los archivos fuente. En este artículo usaremos GOPATH para referirnos al concepto de la estructura de carpetas que vamos a discutir. Utilizaremos $GOPATH para referirnos a la variable de entorno que Go utiliza para encontrar la estructura de carpetas.

Un Go Workspace es la forma en la que Go gestiona nuestros archivos fuente, los binarios compilados y los objetos en caché utilizados para una compilación más rápida más adelante. Es típico, y también aconsejado, tener sólo un Go Workspace, aunque es posible tener múltiples espacios. El GOPATH actúa como la carpeta raíz de un espacio de trabajo.

Configuración de la variable de entorno $GOPATH

La variable de entorno $GOPATH lista lugares para que Go busque espacios de trabajo Go.

Por defecto, Go asume que nuestra ubicación GOPATH está en $HOME/go, donde $HOME es el directorio raíz de nuestra cuenta de usuario en nuestro ordenador. Podemos cambiar esto estableciendo la variable de entorno $GOPATH. Para un mayor estudio, siga este tutorial sobre la lectura y la configuración de las variables de entorno en Linux.

Para obtener más información sobre la configuración de la variable $GOPATH, consulte la documentación de Go.

Además, esta serie camina a través de la instalación de Go y la configuración de un entorno de desarrollo de Go.

$GOPATH no es $GOROOT

El $GOROOT es donde vive el código de Go, el compilador y las herramientas – esto no es nuestro código fuente. El $GOROOT suele ser algo como /usr/local/go. Nuestro $GOPATH suele ser algo como $HOME/go.

Aunque ya no necesitamos configurar específicamente la variable $GOROOT, todavía se hace referencia a ella en materiales más antiguos.

Ahora, vamos a discutir la estructura del espacio de trabajo de Go.

Anatomía del espacio de trabajo de Go

Dentro de un espacio de trabajo de Go, o GOPATH, hay tres directorios: bin, pkg, y src. Cada uno de estos directorios tiene un significado especial para la cadena de herramientas Go.

.├── bin├── pkg└── src └── github.com/foo/bar └── bar.go

Vamos a echar un vistazo a cada uno de estos directorios.

El directorio $GOPATH/bin es donde Go coloca los binarios que go install compila. Nuestro sistema operativo utiliza la variable de entorno $PATH para encontrar aplicaciones binarias que pueden ejecutarse sin una ruta completa. Es recomendable añadir este directorio a nuestra variable global $PATH.

Por ejemplo, si no añadimos $GOPATH/bin a $PATH para ejecutar un programa desde allí, tendríamos que ejecutar:

  • $GOPATH/bin/myapp

Cuando $GOPATH/bin se añade a $PATH podemos hacer la misma llamada así:

  • myapp

El directorio $GOPATH/pkg es donde Go almacena los archivos de objetos precompilados para acelerar la posterior compilación de los programas. Normalmente, la mayoría de los desarrolladores no necesitarán acceder a este directorio. Si experimenta problemas con la compilación, puede eliminar con seguridad este directorio y Go lo reconstruirá.

El directorio src es donde todos nuestros archivos .go, o código fuente, deben estar ubicados. Esto no debe confundirse con el código fuente que utiliza la herramienta Go, que se encuentra en el $GOROOT. A medida que escribimos aplicaciones, paquetes y bibliotecas Go, colocaremos estos archivos en $GOPATH/src/path/to/code.

¿Qué son los paquetes?

El código Go se organiza en paquetes. Un paquete representa todos los archivos de un único directorio en el disco. Un directorio puede contener sólo ciertos archivos del mismo paquete. Los paquetes se almacenan, con todos los archivos fuente de Go escritos por el usuario, bajo el directorio $GOPATH/src. Podemos entender la resolución de paquetes mediante la importación de diferentes paquetes.

Si nuestro código vive en $GOPATH/src/blue/red entonces su nombre de paquete debería ser red.

La sentencia import para el paquete red sería:

import "blue/red"

Los paquetes que viven en repositorios de código fuente, como GitHub y BitBucket, tienen la ubicación completa del repositorio como parte de su ruta de importación.

Por ejemplo, importaríamos el código fuente en https://github.com/gobuffalo/buffalo utilizando la siguiente ruta de importación:

import "github.com/gobuffalo/buffalo"

Por lo tanto, este código fuente estaría en la siguiente ubicación en el disco:

$GOPATH/src/github.com/gobuffalo/buffalo

Conclusión

En este artículo discutimos el GOPATH como un conjunto de carpetas que Go espera que nuestro código fuente viva dentro, así como lo que son esas carpetas, y lo que contienen. Discutimos cómo cambiar esa ubicación desde el valor por defecto de $HOME/go a la elección del usuario mediante la configuración de la variable de entorno $GOPATH. Finalmente, discutimos cómo Go busca los paquetes dentro de esa estructura de carpetas.

Introducido en Go 1.11, los Módulos Go pretenden reemplazar los Espacios de Trabajo Go y el GOPATH. Aunque se recomienda empezar a usar módulos, algunos entornos, como los corporativos, pueden no estar preparados para usar módulos.

El GOPATH es uno de los aspectos más complicados de configurar Go, pero una vez configurado, normalmente podemos olvidarnos de él.

Leave a Reply