go - una - ver tamaño total de disco en linux
Obtén la cantidad de espacio libre en disco usando Go (1)
En los sistemas POSIX puede usar syscall.Statfs
.
Ejemplo de impresión de espacio libre en bytes del directorio de trabajo actual:
import "syscall"
import "os"
var stat syscall.Statfs_t
wd, err := os.Getwd()
syscall.Statfs(wd, &stat)
// Available blocks * size per block = available space in bytes
fmt.Println(stat.Bavail * uint64(stat.Bsize))
Para Windows también necesitas ir a la ruta de syscall. Ejemplo ( source ):
h := syscall.MustLoadDLL("kernel32.dll")
c := h.MustFindProc("GetDiskFreeSpaceExW")
var freeBytes int64
_, _, err := c.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(wd))),
uintptr(unsafe.Pointer(&freeBytes)), nil, nil)
Siéntase libre de escribir un paquete que proporcione la funcionalidad multiplataforma. Sobre cómo implementar algo multiplataforma, vea la página de ayuda de la herramienta de compilación .
Básicamente quiero la salida de df -h
, que incluye tanto el espacio libre como el tamaño total del volumen. La solución debe funcionar en Windows, Linux y Mac y estar escrita en Go.
He syscall
documentación de syscall
y syscall
Go y no he encontrado nada. En Windows, incluso las utilidades de la línea de comandos son torpes ( dir C:/
) o necesitan privilegios elevados ( fsutil volume diskfree C:/
). Seguramente hay una manera de hacer esto que no he encontrado todavía ...
ACTUALIZAR:
Por la respuesta e invitación de nemo, proporcioné un paquete Go multiplataforma que hace esto.