사용자의 홈 디렉토리 얻기
다음은 실행중인 사용자의 홈 디렉토리를 얻는 가장 좋은 방법입니까? 아니면 내가 간과했던 특정 기능이 있습니까?
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
또는 HOMEPATH
Windows에서 사용해야합니다 . 인식 된 환경 변수를 참조하십시오 (더 적절한 문서 링크를 환영합니다).
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_HOME
Linux 의 경로를 존중합니다 .
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
'IT박스' 카테고리의 다른 글
하나의 디렉토리에 두 개의 git 저장소가 있습니까? (0) | 2020.10.09 |
---|---|
Excel 시트에서 Datetime 값 읽기 (0) | 2020.10.09 |
모든 스레드가 Java에서 작업을 마칠 때까지 기다립니다. (0) | 2020.10.09 |
DETERMINISTIC, NO SQL 또는 READS SQL DATA의 선언 및 바이너리 로깅이 활성화 됨 (0) | 2020.10.09 |
삼항 연산자가 매크로에서 1과 0을 정의하는 데 사용되는 이유는 무엇입니까? (0) | 2020.10.09 |