Node.jsでは__ディレクトリ名Golang でこれに相当するものは何ですか?
グーグルで調べてこの記事を見つけましたhttp://andrewbrookins.com/tech/golang-get-directory-of-the-current-file/. ここで彼は以下のコードを使用しています
_, filename, _, _ := runtime.Caller(1)
f, err := os.Open(path.Join(path.Dir(filename), "data.csv"))
しかし、それは Golang で行う正しい方法、あるいは慣用的な方法なのでしょうか?
ベストアンサー1
編集: Go 1.8(2017年2月リリース)では、これを行うための推奨方法はos.Executable
:
func Executable() (string, error)
Executable は、現在のプロセスを開始した実行可能ファイルのパス名を返します。パスが正しい実行可能ファイルを指しているという保証はありません。プロセスを開始するためにシンボリック リンクが使用された場合、オペレーティング システムによっては、結果はシンボリック リンクか、それが指しているパスになる場合があります。安定した結果が必要な場合は、path/filepath.EvalSymlinks が役立つ場合があります。
実行ファイルのディレクトリだけを取得するには、path/filepath.Dir
。
例:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
ex, err := os.Executable()
if err != nil {
panic(err)
}
exPath := filepath.Dir(ex)
fmt.Println(exPath)
}
古い答え:
使用できるはずですos.Getwd
func Getwd() (pwd string, err error)
Getwd は、現在のディレクトリに対応するルート パス名を返します。現在のディレクトリに複数のパス (シンボリック リンクのため) でアクセスできる場合、Getwd はそのうちのいずれか 1 つを返すことがあります。
例えば:
package main
import (
"fmt"
"os"
)
func main() {
pwd, err := os.Getwd()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println(pwd)
}