Utiliza este crédito gratuito para lanzar tus proyectos ahora en Digital Ocean, eres libre de gastarlo cuando quieras en los siguientes 60 días.
Índice del contenido
Go: importación de paquetes y manejo de modulos
Go: importación de paquetes y manejo de modulos
En go puedes considerar un paquete como todos los archivos que contenga un directorio y un modulo como una colección de paquetes. Para usar el código de un paquete necesitamos importarlo, sin embargo, en Go no existen las importaciones de módulos relativas. Antes de Go 1.8, para importar paquetes (no había modulos) era necesario usar la ruta absoluta, considerando como base la ruta a la que apuntaba la variable de entorno $GOPATH o. A partir de Go 1.11, la manera más sencilla de trabajar con paquetes es usar go mod. Te explicaré esta última.
Diferencia entre modulos y paquetes en go
Definir el nombre de un paquete en Go
Antes de empezar, ¿recuerdas que te comenté en la introducción al lenguaje de programación Go , que el nombre de cada paquete se establece al principio de cada archivo, colocándolo después de la palabra reservada package?
Para este ejemplo el nombre del paquete será videogame.
Una vez definido, crearé un modelo o struct en videogame.go.
//videogame/videogame.go
package videogame
type Videogame struct {
Id int32
Title string
}
Recuerda que las reglas de privacidad de los structs dicen que para que podamos acceder a un struct o sus propiedades, desde otro paquete a donde fue declarado, debemos usar mayúsculas.
Una vez creado terminaremos con una structura similar a esta
Localización del archivo principal y nuestro modulo en go
Importar paquetes con go.mod
¿Para que sirve un archivo go.mod?
Un archivo de go.mod define un modulo y nos permite establecer el directorio que usaremos como base para importar los paquetes.
Archivo go.mod que contiene el nombre del modulo
En el ejemplo de arriba el archivo go.mod nos permitirá tratar a la ruta videogame como un paquete e importar código desde la ruta mimodulo/videogame
¿Qué contiene un archivo go.mod?
El archivo básico de go.mod es muy corto, dentro de este solo se especifica el nombre del modulo, el cual usaremos para realizar las importaciones, y la versión de go. Es todo.
module mimodulo
go 1.15
Crear un archivo go.mod
El comando go mod init, seguido del nombre que tomará como la ruta base para nuestro paquete, creará un archivo de nombre go.mod en el directorio donde lo ejecutemos.
go mod init mimodulo
Por ejemplo, si le pasamos como nombre mimodulo, todas las carpetas que estén al mismo nivel que el archivo go.mod y que declaren un package al inicio de su archivo, se considerarán paquetes.
Y podremos importarlos directo desde nuestro archivo main.go
import (
"mimodulo/foobar"
"mimodulo/videogame"
)
Modulos remotos en Go
El manejador de modulos de go
Go tiene un manejador de modulos equivalente a pip y npm, python y javascript, respectivamente, llamado get.
go get
Para obtener modulos remotos ejecutamos el comando go get en consola seguido de la ruta de nuestro paquete; soporta cualquier repositorio, no solo github. Desde la versión de go 1.18, go get no compila el código que descarga, sino que se limita a agregar, actualizar o remover dependencias en el archivo go.mod.
go get github.com/labstack/echo
Tras la ejecución del comando, go descargará los archivos en la ruta a donde apunte la variable de entorno $GOPATH y realizará las importaciones correspondientes en tu archivo go.mod.
module mipaquete
go 1.15
require (
github.com/labstack/echo v3.3.10+incompatible // indirect
github.com/labstack/gommon v0.3.1 // indirect
)
Podrás notar que sus paquetes estarán disponibles para que los importemos con su respectiva ruta.
import "github.com/labstack/echo"
En caso de que necesitemos una versión en específico la declaramos después de la ruta.
go get github.com/labstack/echo/v4
Instalación de código con go install
Por otro lado, go install no descarga código, sino que compila un modulo e instala el binario en $GOPATH/bin, ignorando el contenido del archivo go.mod cuando se le especifica una versión a través de la linea de comandos.
go install sigs.k8s.io/[email protected]
Go install generalmente se usará para instalar comandos.
Importar paquetes remotos en go
Los paquetes que se encuentran en repositorios de código, como GitHub, GitLab o BitBucket, requieren que especifiquemos la ruta completa del repositorio como su ruta de importación.
go mod init github.com/usuario/paquete
Importar paquetes sin usarlos
Hay ocasiones en donde querremos importar paquetes y no usarlos. Para esto basta con agregar un guión bajo antes de la importación.
import (
_ "fmt"
)
Alias al importar paquetes
Go también nos permite declarar un alias a la hora de importar un paquete anteponiendo el alias a la ruta de importación.
import nuestroAlias "ruta/a/paquete"
De esa manera podemos tratar nuestro alias como si se tratara del nombre del paquete que estamos importando.
import nuestroAlias "mipaquete/videogame"
// ... nuestroAlias reemplaza a videogame
var vd = nuestroAlias.Videogame{Id: 1, Title: "hola"}
Importaciones con punto
Go permite acceder al contenido del paquete de manera directa si importamos usando como alias un punto. De esta manera podemos ignorar el nombre del paquete y acceder directamente a los objetos que contiene.
import . "mipaquete/videogame"
// ... en lugar de videogame.Videogame podemos usar solo Videogame
var vd = Videogame{Id: 1, Title: "hola"}
Librerías en Go
Si estás buscando librerías que aceleren el desarrollo de algún proyecto, existe un directorio de frameworks, librerías y utilidades en Awesome go , hay recursos para todo, desde GUI, ORMs, web frameworks, machine learning y todo lo que te puedas imaginar.