GOPATH et Modules

GolangGolangIntermediate
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), nous allons apprendre deux méthodes différentes de gestion des dépendances en Go : le GOPATH et les Go Modules. Ce sont des concepts essentiels pour organiser et gérer efficacement les projets Go.

Points de connaissance :

  • GOPATH
  • GOROOT
  • Go Modules

Préparation

Dans cette étape, nous allons préparer l'environnement en décompressant une archive tar fournie.

  1. Tout d'abord, ouvrez votre terminal et accédez au répertoire du projet en tapant ce qui suit :

    cd ~/project
  2. Décompressez le fichier helloWorld.tar.gz dans le répertoire actuel :

    tar -xzf helloWorld.tar.gz
  3. Une fois le fichier extrait, vérifiez si le dossier helloWorld a été créé :

    ls helloWorld

Cela affichera le contenu du répertoire helloWorld s'il a été correctement décompressé.

Module de base avec GOPATH

Avant Go 1.11, Go utilisait un espace de travail spécifique appelé GOPATH pour stocker tout le code Go. Dans cette étape, nous allons comprendre le fonctionnement du GOPATH.

  1. GOROOT est le répertoire où Go est installé, y compris ses outils et les packages de la bibliothèque standard.
  2. GOPATH est l'endroit où réside votre code Go personnel, et il contient trois répertoires :
    • src : Stocke le code source de votre projet.
    • bin : Stocke les fichiers exécutables compilés.
    • pkg : Stocke les packages compilés qui ne sont pas exécutables.

Pour vérifier le GOPATH et le GOROOT actuels, exécutez les commandes suivantes :

## Check the GOPATH directory
go env | grep GOPATH

## Check the GOROOT directory
go env | grep GOROOT

Ces commandes afficheront les chemins des GOPATH et GOROOT sur votre machine.

Initialiser un module (mod)

Les Go Modules, introduits dans Go 1.11 et activés par défaut dans Go 1.13, visent à résoudre deux problèmes majeurs :

  • Sur-dépendance au GOPATH : Avant les Go Modules, le code devait être stocké dans le répertoire GOPATH/src. Avec les Go Modules, vous pouvez stocker votre code n'importe où sur votre système.
  • Problèmes de dépendance de version : Les Go Modules permettent aux projets de gérer et de suivre les dépendances avec des versions spécifiques, facilitant ainsi le travail avec plusieurs versions du même package.

Dans cette étape, nous allons initialiser un Go Module pour un nouveau projet.

  1. Créez un nouveau répertoire pour le projet appelé testHello :

    cd ~/project
    mkdir testHello
  2. Accédez au répertoire testHello :

    cd testHello
  3. Initialisez le Go Module pour ce projet :

    go mod init testHello

    La sortie devrait être :

    go: creating new go.mod: module testHello
  4. Créez un nouveau fichier Go testHello.go à l'intérieur du dossier testHello avec le contenu suivant :

    touch testHello.go
    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("hello, world")
    }

Maintenant, nous avons initialisé le projet testHello en utilisant les Go Modules et y avons ajouté un simple programme Go.

Importation d'autres packages avec les modules (mod)

Dans cette étape, nous allons démontrer comment importer et utiliser d'autres modules dans votre projet Go.

Le package helloWorld dans le dossier helloWorld a été initialisé avec les Go Modules. De même, le package test, qui utilise également les Go Modules, importe la fonction Say du package helloWorld.

Pour explorer ceci, exécutez la commande suivante :

  1. Tout d'abord, regardez la structure des répertoires helloWorld et test :

    helloWorld
    ├── go.mod
    └── helloWorld.go
    test
    ├── go.mod
    └── test.go
  2. Ensuite, ouvrez le fichier test/go.mod. Vous devriez voir ce qui suit :

    module test
    
    go 1.15
    
    require "helloWorld" v0.0.1
    replace "helloWorld" => "../helloWorld"

La directive replace indique à Go d'utiliser le chemin local ../helloWorld au lieu de le télécharger depuis un dépôt externe. La directive require spécifie que le package test dépend de la version v0.0.1 du package helloWorld.

Paramètre Description
module Spécifie le package
require Spécifie les dépendances
replace Remplace les dépendances
exclude Exclut les dépendances

Pour exécuter le fichier test.go dans le package test :

cd ~/project/test
go run test.go

La sortie devrait être :

hello, world

Importation de packages distants

En Go, vous pouvez facilement importer des packages distants. Demonstrons cela en utilisant un package distant hébergé sur GitHub.

  1. Créez un répertoire remoteModule :

    cd ~/project
    mkdir remoteModule
    cd remoteModule
  2. Initialisez le Go Module :

    go mod init remoteModule
  3. Créez un fichier remote.go à l'intérieur du dossier remoteModule avec le contenu suivant :

    touch remote.go
    package main
    
    import (
        "github.com/labex-labs/golang-dev-code/chap02module"
    )
    
    func main() {
        chap02module.StringTobase64("miiy")
    }

    Ce programme importe le package chap02module depuis GitHub et utilise sa fonction StringTobase64.

  4. Exécutez le fichier remote.go en utilisant les commandes suivantes :

    go get github.com/labex-labs/golang-dev-code/chap02module
    go run -v remote.go

    Astuce : Les utilisateurs gratuits n'ont pas accès à Internet, vous ne pouvez donc pas exécuter cette commande. Passez à l'offre Pro pour avoir accès à Internet.

La commande go get téléchargera le package chap02module depuis GitHub et le placera dans votre cache de modules. Une fois cela fait, la commande go run exécutera votre programme.

Mini test

Dans cette étape, nous allons tester nos connaissances en créant un nouveau fichier qui utilise la fonction Hello du module distant.

  1. Créez un dossier remoteModule2 :

    cd ~/project
    mkdir remoteModule2
    cd remoteModule2
  2. Initialisez le Go Module :

    go mod init remoteModule2
  3. Créez un fichier remote2.go avec le contenu suivant :

    touch remote2.go
    package main
    
    import (
        "github.com/labex-labs/golang-dev-code/chap02module"
    )
    
    func main() {
        chap02module.Hello()
    }
  4. Exécutez le programme :

    go get github.com/labex-labs/golang-dev-code/chap02module
    go run remote2.go

    La sortie devrait être :

    hello
✨ Vérifier la solution et pratiquer

Résumé

Dans ce laboratoire (lab), nous avons appris les points suivants :

  • La signification et le but des répertoires GOPATH et GOROOT.
  • Les bases des Go Modules pour la gestion des dépendances.
  • Comment initialiser et utiliser les Go Modules dans un projet.
  • Comment importer et utiliser des packages Go locaux et distants.

À la fin de ce laboratoire, vous devriez être à l'aise avec l'utilisation des Go Modules pour gérer les dépendances dans vos projets Go.