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