GOPATH y GOROOT: qué poner y dónde, y por qué es importante
\n\nSi estás empezando a aprender Go, tarde o temprano te encontrarás con las mágicas abreviaturas GOPATH y GOROOT. La pregunta «What should be the values of GOPATH and GOROOT?» es una de las más populares en Stack Overflow, y no es casualidad. Los principiantes se confunden, las configuran incorrectamente y obtienen errores extraños al compilar proyectos.
En este artículo te explicaremos de forma sencilla para qué sirven estas variables, qué valores asignarles por defecto y cómo migrar al enfoque moderno con go modules. ¡Allá vamos!
¿Qué es GOROOT?
\n\nGOROOT es la ruta a la carpeta donde está instalado el compilador de Go. Dentro de esta carpeta se encuentran los paquetes estándar (fmt, net, os, etc.), así como los binarios go, gofmt y otras utilidades.
La mayoría de los desarrolladores no necesitan establecer GOROOT explícitamente. Si instalaste Go a través del instalador oficial o un gestor de paquetes, el compilador ya sabe dónde está.
\n\n¿Cómo verificar el valor actual de GOROOT?
\nAbre la terminal y ejecuta:
\ngo env GOROOT\n\nEjemplo de salida en Linux:
\n/usr/local/go\n\nEn Windows (si la instalación fue por defecto):
\nC:\\Program Files\\Go\n\n¿Cuándo es necesario cambiar GOROOT?
\n- \n
- Si moviste la carpeta de Go a otra ubicación. \n
- Si tienes varias versiones de Go instaladas y quieres cambiar entre ellas. \n
- Si compilas Go desde el código fuente y lo instalaste en un directorio no estándar. \n
En todos los demás casos, deja GOROOT en paz — deja que Go se encargue de ello.
\n\n¿Qué es GOPATH?
\n\nAhora bien, GOPATH es una variable mucho más interesante. Históricamente, Go requería que todo tu código estuviera en un único espacio de trabajo. Ese espacio se definía mediante GOPATH.
Por defecto, GOPATH apunta a:
- \n
- Linux/macOS:
$HOME/go\n - Windows:
%USERPROFILE%\\go\n
Dentro de esta carpeta, la estructura estándar es:
\ngo/\n├── bin/ # binarios compilados\n├── pkg/ # archivos objeto compilados y caché\n└── src/ # código fuente de tus proyectos\n ├── github.com/\n │ └── user/\n │ └── myproject/\n └── example.com/\n └── myapp/\n\n¿Cómo verificar el valor actual de GOPATH?
\ngo env GOPATH\n\n¿Qué deben contener GOPATH y GOROOT? (Valores correctos)
\n\nAquí está la respuesta breve a la pregunta principal:
\n\n| Variable | \nValor por defecto (Linux/macOS) | \nValor por defecto (Windows) | \n
|---|---|---|
GOROOT | \n /usr/local/go | \n C:\\Program Files\\Go | \n
GOPATH | \n $HOME/go | \n %USERPROFILE%\\go | \n
Importante: GOPATH y GOROOT deben ser carpetas diferentes. ¡Nunca las configures iguales!
Errores típicos y cómo solucionarlos
\n\nError 1: «GOPATH not set» o «cannot find package»
\nSi usas el enfoque antiguo (anterior a las versiones 1.11-1.13), Go busca paquetes dentro de $GOPATH/src. Si colocaste tu proyecto en otro lugar, el compilador no lo encontrará.
Solución:
\n- \n
- O mueve el proyecto a
$GOPATH/src. \n - O