GOPATH y GOROOT en Go: qué poner y dónde, y por qué es importante

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

GOPATH y GOROOT: qué poner y dónde, y por qué es importante

\n\n

Si 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.

\n\n

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!

\n\n

¿Qué es GOROOT?

\n\n

GOROOT 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.

\n\n

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?

\n

Abre la terminal y ejecuta:

\n
go env GOROOT
\n\n

Ejemplo de salida en Linux:

\n
/usr/local/go
\n\n

En Windows (si la instalación fue por defecto):

\n
C:\\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
\n\n

En todos los demás casos, deja GOROOT en paz — deja que Go se encargue de ello.

\n\n

¿Qué es GOPATH?

\n\n

Ahora 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.

\n\n

Por defecto, GOPATH apunta a:

\n
    \n
  • Linux/macOS: $HOME/go
  • \n
  • Windows: %USERPROFILE%\\go
  • \n
\n\n

Dentro de esta carpeta, la estructura estándar es:

\n
go/\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?

\n
go env GOPATH
\n\n

¿Qué deben contener GOPATH y GOROOT? (Valores correctos)

\n\n

Aquí está la respuesta breve a la pregunta principal:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
VariableValor por defecto (Linux/macOS)Valor por defecto (Windows)
GOROOT/usr/local/goC:\\Program Files\\Go
GOPATH$HOME/go%USERPROFILE%\\go
\n\n

Importante: GOPATH y GOROOT deben ser carpetas diferentes. ¡Nunca las configures iguales!

\n\n

Errores típicos y cómo solucionarlos

\n\n

Error 1: «GOPATH not set» o «cannot find package»

\n

Si 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á.

\n\n

Solución:

\n
    \n
  • O mueve el proyecto a $GOPATH/src.
  • \n
  • O

Blogs

Book Recommendations