Accès aux variables d'environnement en go
Les variables d'environnement sont des variables dynamiques définies sur un système d'exploitation afin de communiquer des informations entre les programmes exécutés sur un ordinateur. Par exemple :
- Sur tous les systèmes, on trouvera la variable PATH qui contient la liste des répertoires dans lesquels vont être recherchés les fichiers exécutables.
- Lorsque vous installez Go, vous devez initialiser la variable GOPATH qui indique où seront stockés les paquets autres que ceux de la bibliothèque standard.
Exemple de code
La bibliothèque standard de go contient de quoi manipuler les variables d'environnement. Voici un exemple de code avec les différentes possibilités :
package main
import "os"
import "strings"
import "fmt"
func main() {
os.Setenv("MA_VARIABLE_GO", "42")
fmt.Println("MA_VARIABLE_GO:", os.Getenv("MA_VARIABLE_GO"))
fmt.Println("N'existe pas:", os.Getenv("INEXISTANT_BLA_BLA"))
for _, e := range os.Environ() {
pair := strings.Split(e, "=")
fmt.Println(pair[0])
}
}
Quelques remarques à propos de ce code :
- On peut créer ou mettre à jour une variable avec la fonction os.Setenv.
- La fonction os.Getenv permet d'accéder à une variable d'environnement.
- Si une variable d'environnement n'existe pas, os.Getenv ne générera pas d'erreur, mais retournera une chaîne de caractères vide.
- La fonction os.Environ retourne un slice contenant toutes les variables d'environnement. C'est une liste de chaîne de caractères sous la forme VARIABLE=valeur. On peut donc les découper avec la fonction strings.Split d'obtenir une liste d'associations clé/valeur. Note: ce programme n'affichera que la liste des variables et pas leurs valeurs.
Comme le comportement varie d'une machine à l'autre, j'ai préféré ne pas indiquer le résultat de ce programme.
Remarque sur les variables d'environnement
Le comportement et le nom des variables d'environnement varie d'un ordinateur à l'autre, mais aussi d'un système d'exploitation à l'autre. Il en va de même pour leur durée de vie et leur portée. Elles peuvent être, par exemple, définies pour tous les programmes lancés dans un terminal et à partir d'un moment donné ou pour tous les programmes lancés après le démarrage du système. Ce qui est sûr, c'est qu'une variable d'environnement créée à l'aide d'
os.Setenv disparaîtra, par exemple, à l'arrêt du programme go qui l'a créée. Et que seuls les processus enfant de ce programme go (c.-à-d. créés par ce programme go) en verront la valeur.
Ce n'est pas l'objet de cet article ni de ce site que de traiter tous les cas de figure, aussi je vous invite à vous renseigner sur les variables d'environnement. Et ce, pour tous les systèmes d'exploitation sur lesquels vous souhaitez déployer votre programme go.
À lire également
Je vous conseille de lire aussi mon article sur la
gestion des paramètres et des options de la ligne de commande d'un programme go.