web-dev-qa-db-ja.com

golangで相対パスを絶対パスに解決するにはどうすればよいですか?

ノードに「path.resolve」のようなAPIがありますか?または何か同じことができますか?

例(nodejsコード):path.resolve("~/sample.sh")得られるべきもの:/home/currentuser/sample.sh

6
Andrew Cui

_~_(ユーザーのホームを示す)の解決は別の話であり、通常、これを解決するのはシェルです。詳細については、「 チルダをホームディレクトリに展開する 」を参照してください。

Goコードから実行する場合は、 user.Current() 関数を使用して、_User.HomeDir_になるホームフォルダーなど、現在のユーザーに関する詳細を取得できます。それでも、これを自分で交換する必要があります。

元の答えは次のとおりです。


path.Join() または filepath.Join() を使用できます。

例えば:

_base := "/home/bob"
fmt.Println(path.Join(base, "work/go", "src/github.com"))
_

出力:

_/home/bob/work/go/src/github.com
_

path.Clean() および filepath.Clean() を使用して、ドット_._およびダブルドット_.._を「削除」できます。あなたの道から。

filepath.Abs() を使用して、相対パスを解決し、絶対パスを取得することができます(絶対パスでない場合は作業ディレクトリを追加します)。 filepath.Abs()は、結果に対してClean()も呼び出します。

例えば:

_fmt.Println(filepath.Abs("/home/bob/../alice"))
_

出力:

_/home/alice <nil>
_

Go Playground の例を試してください。

関連する質問を参照してください: 相対パスからの絶対パスの解決

10
icza