Dep est le gestionnaire de paquet officiel de Golang. Au même titre que NPM pour Node.js, PIP pour Python, Composer pour PHP, etc… Fini donc les go get
à tire-larigot, place à un manifeste et un dossier contenant toutes les dépendances externes !
Installation
Pour installer Dep sur Windows, rendez-vous sur la page des releases du projet https://github.com/golang/dep/releases.
Téléchargez la version appropriée (dep-windows-amd64.exe pour votre Windows 64 bits).
Une fois l’exécutable téléchargé, placez-le dans le dossier dédié C:/Go/Bin
et renommez le fichier en dep.exe.
Ajoutez l’exécutable de Dep comme variable d’environnement avec la commande suivante set DEP=C:/Go/bin
.
La commande dep
est desormais accessible depuis n’importe quel endroit.
Pour les autres systèmes d’exploitation : https://golang.github.io/dep/docs/installation.html
Téléchargement d'un package
Dans votre dossier %GOPATH%
(C:/gopath
par défaut), créez un nouveau projet.
cd %gopath% && cd src && mkdir test && cd test
Puis lancez la commande d’initialisation dep init
. A la suite de cette commande, 2 fichiers et 1 dossier ont été créé.
- Gopkg.lock
- Gopkg.toml
- Vendor
Ajoutons un package à notre projet pour tester avec la commande dep ensure -add github.com/gin-gonic/gin
.
Oups, on a l’erreur suivante "no dirs contained any Go code". Créez le fichier main.go et relancez la commande.
Oups, une autre erreur "all dirs contained build errors". Editez le fichier main.go.
package main
func main() {
}
Puis relancez la commande.
Fetching sources...
"github.com/gin-gonic/gin" is not imported by your project, and has been temporarily added to Gopkg.lock and vendor/.
If you run "dep ensure" again before actually importing it, it will disappear from Gopkg.lock and vendor/.
Dep nous informe que le package n’est pas utilisé dans notre fichier main.go.
Ouvrez le fichier Gopkg.toml. Une nouvelle ligne est apparue.
[[constraint]]
name = "github.com/gin-gonic/gin"
version = "1.3.0"
Modifiez le fichier main.go (pas besoin de l’exécuter, la ligne la plus importante est la 3).
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // http:localhost:8080
}
Puis lancez la commande dep status
.
On retrouve ces dépendances dans le fichier Gopkg.lock.
Si le fichier main.go est déjà présent, Dep se chargera de télécharger les packages présents dans import
lors de la commande dep init
.
Dep garde en cache les dépendances dans le dossier %gopath%/pkg/dep/sources
.
Mettre à jour un package
Un package en particulier : dep ensure -update <nom_package>
.
Tous les packages : dep ensure -update
.
Supprimer un package
La suppression d’un package se fait directement dans votre code. Pour cela, supprimez l’appel le package utilisé directement dans votre fichier Go (la ligne import
concernée) puis lancez la commande dep ensure
. Par enchantement, le package ainsi que ses dépendances sont supprimés du dossier vendor.
Dep est assez semblable à NPM. Le fichier package.json correspond au fichier Gopkg.toml, le fichier package-lock.json au fichier Gopkg.lock et le dossier node_modules au dossier vendor. N’oubliez pas par la suite, d’exclure le dossier vendor dans votre fichier .gitignore avant de pousser avec Git votre projet. La personne qui voudra consulter votre code, n’aura qu’une seule commande à exécuter.
- Site officiel : https://golang.github.io/dep
- Présentation de Dep lors de la GopherCon 2017 en 10 minutes : https://youtu.be/eZwR8qr2BfI