IT박스

사용자의 홈 디렉토리 얻기

itboxs 2020. 10. 9. 09:05
반응형

사용자의 홈 디렉토리 얻기


다음은 실행중인 사용자의 홈 디렉토리를 얻는 가장 좋은 방법입니까? 아니면 내가 간과했던 특정 기능이 있습니까?

os.Getenv("HOME")

위의 내용이 맞다면이 접근 방식이 비 Linux 플랫폼 (예 : Windows)에서 작동하는 것이 보장되는지 아는 사람이 있습니까?


Go 1.0.3 (아마도 이전 버전 일 수도 있음)에서는 다음과 같이 작동합니다.

package main
import (
    "os/user"
    "fmt"
    "log"
)
func main() {
    usr, err := user.Current()
    if err != nil {
        log.Fatal( err )
    }
    fmt.Println( usr.HomeDir )
}

크로스 컴파일이 중요한 경우 라이브러리를 고려 하십시오.homedir


예를 들면

package main

import (
    "fmt"
    "os"
    "runtime"
)

func UserHomeDir() string {
    if runtime.GOOS == "windows" {
        home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
        if home == "" {
            home = os.Getenv("USERPROFILE")
        }
        return home
    }
    return os.Getenv("HOME")
}

func main() {
    dir := UserHomeDir()
    fmt.Println(dir)
}

os.UserHomeDir ()

go1.12 +에서는 os.UserHomeDir ()을 사용할 수 있습니다.

home, err := os.UserHomeDir()

참조 https://golang.org/pkg/os/#UserHomeDir를

CGO를 사용하지 않고 (예 :) FROM scratch구문 분석 /etc/passwd하거나 다른 말도 안되는 일 없이도 작동해야합니다 .


다음은이를 수행하는 훌륭하고 간결한 방법입니다 (UNIX 기반 시스템에서만 실행중인 경우).

import (
  "os"
)

var home string = os.Getenv("HOME")

$ HOME 환경 변수를 쿼리합니다.

--- 편집하다 ---

이제 위와 동일한 방법이 제안되었음을 알 수 있습니다. 이 예제는 여기에 증류 용액으로 남겨 두겠습니다.


환경 변수 USERPROFILE또는 HOMEPATHWindows에서 사용해야합니다 . 인식 된 환경 변수를 참조하십시오 (더 적절한 문서 링크를 환영합니다).


go1.8rc2에는 홈 디렉토리를 가져 오는 go / build / defaultGOPATH 함수가 있습니다. https://github.com/golang/go/blob/go1.8rc2/src/go/build/build.go#L260-L277

다음 코드는 defaultGOPATH 함수에서 추출됩니다.

package main

import (
    "fmt"
    "os"
    "runtime"
)

func UserHomeDir() string {
    env := "HOME"
    if runtime.GOOS == "windows" {
        env = "USERPROFILE"
    } else if runtime.GOOS == "plan9" {
        env = "home"
    }
    return os.Getenv(env)
}

func main() {
    dir := UserHomeDir()
    fmt.Println(dir)
}

@peterSO와 비슷한 대답이지만 XDG_CONFIG_HOMELinux 경로를 존중합니다 .

package main

import (
    "fmt"
    "os"
    "runtime"
)

func userHomeDir() string {
    if runtime.GOOS == "windows" {
        home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
        if home == "" {
            home = os.Getenv("USERPROFILE")
        }
        return home
    } else if runtime.GOOS == "linux" {
        home := os.Getenv("XDG_CONFIG_HOME")
        if home != "" {
            return home
        }
    }
    return os.Getenv("HOME")
}

func main() {
    fmt.Println(userHomeDir())
}

참고 URL : https://stackoverflow.com/questions/7922270/obtain-users-home-directory

반응형