ユーザのホームディレクトリの取得

実行ユーザのホームディレクトリを取得する方法は、以下の通りでしょうか?それとも、何か特別な機能があるのでしょうか?

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 ライブラリを検討してください。

解説 (7)

例えば、こんな感じです。

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)
}
解説 (2)

Windows では、環境変数 USERPROFILE または HOMEPATH を使用する必要があります。Recognized Environment Variables](http://technet.microsoft.com/en-us/library/cc749104%28WS.10%29.aspx) を参照してください (もっと適切なドキュメントへのリンクがあるとありがたいです)。

解説 (3)