Importación de paquetes locales en Go: guía paso a paso con código

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

¿Por qué la importación de paquetes locales en Go genera tantas preguntas?

\n\n

Si alguna vez ha intentado organizar código Go en archivos y carpetas separados, seguramente se ha encontrado con un error como could not import "myproject/utils". Este es uno de los problemas más comunes entre los desarrolladores Go principiantes. En Stack Overflow, la pregunta "How to import local packages in go?" ha acumulado miles de visitas, y no es casualidad.

\n\n

A diferencia de Python, donde basta con colocar un archivo al lado y escribir import mymodule, Go requiere una estructura clara y una configuración correcta de módulos. Pero, una vez que domine este mecanismo, comprenderá lo elegante que es. Aclaremos esto de una vez por todas.

\n\n

Breve teoría: cómo entiende Go los paquetes

\n\n

Antes de escribir código, recuerde tres principios clave:

\n\n
    \n
  • Go es un lenguaje con una estructura modular estricta. Cada directorio es un paquete (package).
  • \n
  • El nombre del paquete no tiene que coincidir con el nombre de la carpeta, pero se recomienda encarecidamente hacerlo para facilitar la lectura.
  • \n
  • La importación de paquetes locales desde 2019 se realiza a través de módulos (Go modules). Olvídese de GOPATH — use go mod.
  • \n
\n\n

Ahora pasemos a la práctica.

\n\n

Paso 1: Crear un proyecto con módulo

\n\n

Abra la terminal y cree una nueva carpeta para su proyecto:

\n\n
mkdir go-local-imports\ncd go-local-imports\n
\n\n

Ahora inicialice el módulo. El nombre del módulo puede ser cualquiera, pero es lógico usar una ruta que sea única (por ejemplo, un enlace al repositorio):

\n\n
go mod init github.com/su-usuario/go-local-imports\n
\n\n

Después de este comando, aparecerá un archivo go.mod en la carpeta. Este se encargará de gestionar las dependencias, tanto locales como externas.

\n\n

Paso 2: Crear un paquete local

\n\n

Creemos una carpeta utils dentro del proyecto. Dentro de ella, un archivo math.go:

\n\n
mkdir utils\ncd utils\ntouch math.go\n
\n\n

Abra utils/math.go y escriba:

\n\n
package utils\n\n// Add devuelve la suma de dos números enteros\nfunc Add(a, b int) int {\n    return a + b\n}\n
\n\n

Observe que la función Add está escrita con mayúscula inicial. En Go, esto significa que se exporta (es pública). Si escribe add, será privada e inaccesible desde otros paquetes.

\n\n

Paso 3: Importar y usar el paquete local

\n\n

Volvamos a la carpeta raíz del proyecto y creemos main.go:

\n\n
cd ..\ntouch main.go\n
\n\n

Contenido de main.go:

\n\n
package main\n\nimport (\n    "fmt"\n    "github.com/su-usuario/go-local-imports/utils"\n)\n\nfunc main() {\n    result := utils.Add(3, 5)\n    fmt.Println("Suma:", result)\n}\n
\n\n

Ahora ejecute el programa:

\n\n
go run main.go\n
\n\n

Debería ver:

\n\n
Suma: 8\n
\n\n

¡Todo funciona! Pero si obtuvo un error, lea la siguiente sección.

\n\n

Errores típicos y su solución

\n\n

Error 1: "package is not in GOROOT"

\n\n

Verá algo como:

\n
package myproject/utils is not in GOROOT (/usr/local/go/src/myproject/utils)
\n\n

Causa: Está intentando importar un paquete sin un módulo. Go lo busca en la biblioteca estándar, no en su proyecto.

\n

Solución: Asegúrese de que en la raíz del proyecto exista go.mod. Si no, ejecute go mod init nombre-del-módulo.

\n\n

Error 2: "undefined: utils.Add"

\n\n

Causa: La función está escrita con minúscula inicial (privada), o importó el paquete pero no usa su nombre.

\n

Solución: Verifique que todas las funciones necesarias se exporten (con mayúscula inicial) y que las esté llamando

Blogs

Book Recommendations