>백엔드 개발 >Golang >Go에서 여유 디스크 공간을 얻는 방법: 크로스 플랫폼 가이드?

Go에서 여유 디스크 공간을 얻는 방법: 크로스 플랫폼 가이드?

Patricia Arquette
Patricia Arquette원래의
2024-12-28 01:52:09807검색

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

Go에서 여유 디스크 공간 확보

여유 디스크 공간을 찾는 것은 시스템 관리에서 일반적인 작업입니다. Go에서는 사용 중인 운영 체제에 따라 적절한 기능을 사용하여 이 정보를 검색할 수 있습니다.

POSIX 시스템

POSIX 시스템에서는 sys .unix.Statfs 함수. 이 함수는 파일이나 디렉터리의 경로를 인수로 사용하고 unix.Statfs_t 구조를 반환합니다. 이 구조의 Bavail 필드는 파일 시스템에서 사용 가능한 블록 수를 나타내고, Bsize 필드는 각 블록의 크기(바이트)를 나타냅니다. 여유 공간을 바이트 단위로 계산하려면 이 두 값을 곱하세요.

예를 들어 현재 작업 디렉터리의 여유 공간을 바이트 단위로 인쇄하려면:

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)
}

Windows

Windows에서는 syscall 패키지를 사용할 수 있습니다. 이 패키지는 GetDiskFreeSpaceEx 기능이 포함된 Windows API에 대한 액세스를 제공합니다. 이 함수는 드라이브 경로를 인수로 사용하고 사용 가능한 여유 바이트 수, 총 바이트 수 및 총 여유 바이트 수를 반환합니다.

예를 들어 드라이브의 여유 공간을 바이트 단위로 가져오려면 C: 드라이브:

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)
}

크로스 플랫폼 패키지

필요한 경우 크로스 플랫폼 솔루션을 사용하면 POSIX 및 Windows 시스템 모두에 기능을 제공하는 패키지를 만들 수 있습니다. Go의 빌드 도구를 사용하면 빌드 중인 운영 체제에 따라 다양한 동작을 지정할 수 있습니다.

위 내용은 Go에서 여유 디스크 공간을 얻는 방법: 크로스 플랫폼 가이드?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.