106

実行中のユーザーのホーム ディレクトリを取得するには、次の方法が最適ですか? または、私が見落とした特定の機能がありますか?

os.Getenv("HOME")

上記が正しい場合、このアプローチが Linux 以外のプラットフォーム (Windows など) で動作することが保証されているかどうかを知っている人はいますか?

4

7 に答える 7

209

go 1.12以降、推奨される方法は次のとおりです。

package main
import (
    "os"
    "fmt"
    "log"
)
func main() {
    dirname, err := os.UserHomeDir()
    if err != nil {
        log.Fatal( err )
    }
    fmt.Println( dirname )
}

古い勧告:

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 )
}
于 2012-10-22T03:50:44.710 に答える
78

os.UserHomeDir()

go1.12+ では os.UserHomeDir() を使用できます

home, err := os.UserHomeDir()

https://golang.org/pkg/os/#UserHomeDirを参照してください

これは、CGO を有効にしなくても (つまりFROM scratch)、解析/etc/passwdやその他のナンセンスを必要とせずに機能するはずです。

于 2019-04-03T09:15:18.570 に答える
23

例えば、

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)
}
于 2011-10-27T22:01:23.783 に答える
4

これを行うための適切で簡潔な方法を次に示します (UNIX ベースのシステムのみで実行している場合)。

import (
  "os"
)

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

$HOME 環境変数を照会するだけです。

- - 編集 - -

これと同じ方法が上記で提案されていることがわかりました。この例を蒸留液としてここに残しておきます。

于 2013-10-03T18:27:45.937 に答える
2

環境変数USERPROFILEまたはHOMEPATHWindows で使用する必要があります。Recognized Environment Variablesを参照してください(より適切なドキュメントへのリンクを歓迎します)。

于 2011-10-27T21:06:41.287 に答える