Ответ 1
В системах POSIX вы можете использовать syscall.Statfs
.
Пример печати свободного места в байтах текущего рабочего каталога:
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))
Для Windows вам нужно также перейти на маршрут syscall. Пример (источник):
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)
Не стесняйтесь писать пакет, который обеспечивает функциональность кросс-платформенной. О том, как реализовать что-то кросс-платформенное, см. В справочной странице .