いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-651 (os.UserHomeDir)(Go 1.12から追加, UserConfigDir, UserCacheDir)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。

結構長いことGoを使っているのですが、ホームディレクトリの取得にいつも user.Current().HomeDir を使っていました。

Go 1.12から os.UserHomeDir が追加されていたのですね・・・知らなかった。

サンプル

homedir.go

package osop

import (
        "fmt"
        "os"
        "os/user"
)

// HomeDir は、os.UserHomeDir()のサンプルです。
// Go 1.12から追加された関数。user.Current.HomeDirを使わなくても良くなる。
//
// osパッケージ側に以下の関数が用意されている
//
// - os.UserHomeDir
// - os.UserConfigDir
// - os.UserCacheDir
//
// # REFERENCES
//   - https://pkg.go.dev/os@go1.25.5#UserHomeDir
//   - https://text.baldanders.info/golang/no-need-go-homedir/
func HomeDir() error {
        // go 1.12より前は以下の様にしていた。
        u, err := user.Current()
        if err != nil {
                return fmt.Errorf("user.Current: %w", err)
        }

        fmt.Printf("user.Current.HomeDir: %s\n", u.HomeDir)

        // go 1.12以降は以下で取得できる
        homedir, err := os.UserHomeDir()
        if err != nil {
                return fmt.Errorf("os.UserHomeDir: %w", err)
        }

        fmt.Printf("os.HomeDir: %s\n", homedir)

        return nil
}

実行結果

$ task
task: [run] ./try-golang -onetime

ENTER EXAMPLE NAME: osop_homedir

[Name] "osop_homedir"
user.Current.HomeDir: /home/dev
os.HomeDir: /home/dev


[Elapsed] 1.929271ms

参考情報

text.baldanders.info

個人的Goのおすすめ書籍

個人的に読んでとても勉強になった書籍さんたちです。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。