Maison > développement back-end > Golang > Comment obtenir de l'espace disque libre dans Go : un guide multiplateforme ?

Comment obtenir de l'espace disque libre dans Go : un guide multiplateforme ?

Patricia Arquette
Libérer: 2024-12-28 01:52:09
original
798 Les gens l'ont consulté

How to Get Free Disk Space in Go: A Cross-Platform Guide?

Obtenir de l'espace disque libre dans Go

Trouver la quantité d'espace disque libre est une tâche courante dans l'administration système. Dans Go, vous pouvez récupérer ces informations à l'aide des fonctions appropriées en fonction du système d'exploitation que vous utilisez.

Systèmes POSIX

Sur les systèmes POSIX, vous pouvez utiliser le sys Fonction .unix.Statfs. Cette fonction prend le chemin d'accès à un fichier ou à un répertoire comme argument et renvoie une structure unix.Statfs_t. Le champ Bavail de cette structure représente le nombre de blocs disponibles sur le système de fichiers, tandis que le champ Bsize représente la taille de chaque bloc en octets. Pour calculer l'espace libre en octets, multipliez ces deux valeurs.

Par exemple, pour imprimer l'espace libre en octets du répertoire de travail actuel :

import (
    "fmt"
    "golang.org/x/sys/unix"
    "os"
)

func main() {
    var stat unix.Statfs_t

    wd, err := os.Getwd()
    if err != nil {
        panic(err)
    }

    if err := unix.Statfs(wd, &stat); err != nil {
        panic(err)
    }

    freeSpace := stat.Bavail * uint64(stat.Bsize)
    fmt.Println(freeSpace)
}
Copier après la connexion

Windows

Sous Windows, vous pouvez utiliser le package syscall. Ce package donne accès à l'API Windows, qui inclut la fonction GetDiskFreeSpaceEx. Cette fonction prend le chemin d'accès à un lecteur comme argument et renvoie les octets libres disponibles, le nombre total d'octets et le nombre total d'octets libres.

Par exemple, pour obtenir l'espace libre en octets sur le C: drive :

import (
    "fmt"
    "golang.org/x/sys/windows"
)

func main() {
    var freeBytesAvailable uint64
    var totalNumberOfBytes uint64
    var totalNumberOfFreeBytes uint64

    err := windows.GetDiskFreeSpaceEx(windows.StringToUTF16Ptr("C:"),
        &freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes)
    if err != nil {
        panic(err)
    }

    fmt.Println(freeBytesAvailable)
}
Copier après la connexion

Package multiplateforme

Si vous avez besoin d'un multiplateforme solution, vous pouvez créer un package qui fournit les fonctionnalités pour les systèmes POSIX et Windows. L'outil de construction de Go vous permet de spécifier différents comportements en fonction du système d'exploitation pour lequel vous construisez.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal