0Pricing
Go Academy · Leçon

Packages os et filepath

Variables d’environnement, chemins et interaction avec le système d’exploitation

Packages os et filepath est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.

os.Args — Arguments de la ligne de commande

os.Args contient les arguments de la ligne de commande. os.Args[0] est le nom du programme :

package main
import ("fmt"; "os")

func main() {
    fmt.Println("Program:", os.Args[0])
    if len(os.Args) < 2 {
        fmt.Println("Usage: program <name>")
        os.Exit(1)
    }
    fmt.Printf("Hello, %s!\n", os.Args[1])
}

os.Getenv et os.Setenv

Lisez et écrivez les variables d'environnement :

package main
import ("fmt"; "os")

func main() {
    // Read env var (returns "" if not set)
    home := os.Getenv("HOME")
    fmt.Println("HOME:", home)

    // Set env var
    os.Setenv("APP_ENV", "production")
    fmt.Println(os.Getenv("APP_ENV")) // production

    // Get with default pattern:
    port := os.Getenv("PORT")
    if port == "" { port = "8080" }
    fmt.Println("Port:", port)
}

os.Exit — Arrêt du programme

os.Exit arrête le programme avec un code d'état. 0 = réussite ; une valeur différente de zéro = erreur. Les fonctions différées ne s'exécutent PAS :

package main
import ("fmt"; "os")

func main() {
    config := os.Getenv("CONFIG_PATH")
    if config == "" {
        fmt.Fprintln(os.Stderr, "error: CONFIG_PATH not set")
        os.Exit(1)  // signals error to the shell
    }
    fmt.Println("config:", config)
}

os.Open, os.Create, os.ReadFile

Opérations sur les fichiers avec le paquet os :

package main
import ("fmt"; "os")

func main() {
    // Read entire file
    data, err := os.ReadFile("/etc/hostname")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("hostname: %s", data)

    // Write file (overwrites if exists)
    err = os.WriteFile("/tmp/test.txt", []byte("hello\n"), 0644)
    fmt.Println("write err:", err)
}

os.Stat — Informations sur le fichier

os.Stat renvoie des informations sur un fichier ou un répertoire :

package main
import ("fmt"; "os")

func main() {
    info, err := os.Stat("/tmp")
    if err != nil {
        if os.IsNotExist(err) {
            fmt.Println("does not exist")
        }
        return
    }
    fmt.Println(info.Name())     // tmp
    fmt.Println(info.IsDir())    // true
    fmt.Println(info.Size())     // size in bytes
    fmt.Println(info.Mode())     // file permissions
    fmt.Println(info.ModTime())  // last modified time
}

os.MkdirAll et os.RemoveAll

Créez et supprimez des arborescences de répertoires :

package main
import ("fmt"; "os")

func main() {
    // Create nested directories
    err := os.MkdirAll("/tmp/myapp/data/logs", 0755)
    fmt.Println("mkdir:", err)

    // Remove a file
    err = os.Remove("/tmp/test.txt")
    fmt.Println("remove:", err)

    // Remove directory and all contents
    err = os.RemoveAll("/tmp/myapp")
    fmt.Println("removeAll:", err)
}

path/filepath : Chemins multiplateformes

path/filepath gère les chemins de fichiers en utilisant le séparateur de chemins du système d'exploitation (/ sous Unix, \ sous Windows) :

package main
import ("fmt"; "path/filepath")

func main() {
    // Join path components correctly
    p := filepath.Join("/home", "user", "docs", "file.txt")
    fmt.Println(p)  // /home/user/docs/file.txt

    // Split path and file
    dir, file := filepath.Split(p)
    fmt.Println(dir, file) // /home/user/docs/ file.txt

    // Extension
    fmt.Println(filepath.Ext(p))  // .txt

    // Base name
    fmt.Println(filepath.Base(p)) // file.txt
}

filepath.Walk — Parcours des répertoires

Parcourez une arborescence de répertoires en visitant chaque fichier et chaque répertoire :

package main
import ("fmt"; "os"; "path/filepath")

func main() {
    err := filepath.Walk("/tmp", func(path string, info os.FileInfo, err error) error {
        if err != nil { return err }
        if info.IsDir() {
            fmt.Println("[DIR]", path)
        } else {
            fmt.Printf("[FILE] %s (%d bytes)\n", path, info.Size())
        }
        return nil
    })
    if err != nil { fmt.Println("walk error:", err) }
}

filepath.Glob — Recherche par motif

Recherchez les fichiers correspondant à un motif glob :

package main
import ("fmt"; "path/filepath")

func main() {
    // Find all .go files in current directory
    matches, err := filepath.Glob("*.go")
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, m := range matches {
        fmt.Println(m)
    }

    // Absolute path resolution
    abs, _ := filepath.Abs("../myfile.txt")
    fmt.Println(abs)
}

os.TempDir et os.CreateTemp

Créez des fichiers temporaires en toute sécurité :

package main
import ("fmt"; "os")

func main() {
    // System temp directory
    fmt.Println(os.TempDir()) // /tmp

    // Create a unique temp file
    f, err := os.CreateTemp("", "myapp-*.json")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer os.Remove(f.Name()) // clean up
    defer f.Close()
    fmt.Println("temp file:", f.Name())
    _, _ = f.WriteString(`{"status":"ok"}`)
}

Vérification rapide

Quelle fonction assemble correctement les composants d'un chemin de fichier de manière multiplateforme ?

Récapitulatif : os et filepath

Résumé :

  • os.Args — arguments de la commande ; os.Getenv/Setenv — environnement
  • os.ReadFile/WriteFile pour les entrées-sorties simples sur les fichiers
  • os.Stat — informations sur le fichier ; os.IsNotExist(err) pour les fichiers absents
  • os.MkdirAll/RemoveAll pour la gestion des répertoires
  • filepath.Join/Split/Ext/Base pour les chemins multiplateformes
  • filepath.Walk pour parcourir les arborescences de répertoires

Questions Fréquemment Posées

La leçon « Packages os et filepath » est-elle gratuite ?

Oui — le texte complet de « Packages os et filepath » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Packages os et filepath » ?

Variables d’environnement, chemins et interaction avec le système d’exploitation Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Go Academy ?

Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Packages os et filepath » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?

Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Packages fmt et strings
  2. strconv, math et sort
  3. Les essentiels du package time
  4. Packages os et filepath
← Retour à Go Academy