実行中のユーザーのホーム ディレクトリを取得するには、次の方法が最適ですか? または、私が見落とした特定の機能がありますか?
os.Getenv("HOME")
上記が正しい場合、このアプローチが Linux 以外のプラットフォーム (Windows など) で動作することが保証されているかどうかを知っている人はいますか?
実行中のユーザーのホーム ディレクトリを取得するには、次の方法が最適ですか? または、私が見落とした特定の機能がありますか?
os.Getenv("HOME")
上記が正しい場合、このアプローチが Linux 以外のプラットフォーム (Windows など) で動作することが保証されているかどうかを知っている人はいますか?
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 )
}
go1.12+ では os.UserHomeDir() を使用できます
home, err := os.UserHomeDir()
https://golang.org/pkg/os/#UserHomeDirを参照してください
これは、CGO を有効にしなくても (つまりFROM scratch
)、解析/etc/passwd
やその他のナンセンスを必要とせずに機能するはずです。
例えば、
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)
}
これを行うための適切で簡潔な方法を次に示します (UNIX ベースのシステムのみで実行している場合)。
import (
"os"
)
var home string = os.Getenv("HOME")
$HOME 環境変数を照会するだけです。
- - 編集 - -
これと同じ方法が上記で提案されていることがわかりました。この例を蒸留液としてここに残しておきます。
環境変数USERPROFILE
またはHOMEPATH
Windows で使用する必要があります。Recognized Environment Variablesを参照してください(より適切なドキュメントへのリンクを歓迎します)。