Récupération d'espace disque multiplateforme dans Go
Dans cet article, nous abordons le défi d'obtenir des informations sur l'espace disque libre, couvrant Windows, Plateformes Linux et Mac utilisant le langage de programmation Go.
Problème Déclaration
L'objectif est de répliquer le résultat de la commande Unix largement utilisée df -h, qui fournit des détails sur l'espace de stockage libre et total pour les volumes. Cette fonctionnalité doit être adaptable à divers systèmes d'exploitation et implémentée dans Go.
Solution
Systèmes POSIX (Linux, Mac)
Sur les systèmes basés sur POSIX (systèmes d'exploitation de type Unix tels que Linux et Mac), le package sys.unix.Statfs est utilisé. Ce package contient la fonction Statfs, qui renvoie une structure de données représentant les statistiques du système de fichiers. L'extrait de code suivant illustre son utilisation :
import "golang.org/x/sys/unix" import "os" var stat unix.Statfs_t wd, err := os.Getwd() unix.Statfs(wd, &stat) // Available blocks * size per block = available space in bytes fmt.Println(stat.Bavail * uint64(stat.Bsize))
Systèmes Windows
Pour les systèmes Windows, le package syscall permet d'accéder aux appels système Windows. L'extrait de code suivant démontre son utilisation :
import "golang.org/x/sys/windows" var freeBytesAvailable uint64 var totalNumberOfBytes uint64 var totalNumberOfFreeBytes uint64 err := windows.GetDiskFreeSpaceEx(windows.StringToUTF16Ptr("C:"), &freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes)
Package multiplateforme
Sur la base des solutions fournies, les utilisateurs sont encouragés à développer un package multiplateforme qui encapsule cette fonctionnalité. Ce package doit faire abstraction des implémentations sous-jacentes spécifiques à la plate-forme et fournir une interface cohérente pour récupérer les informations sur l'espace disque libre quel que soit le système d'exploitation.
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!