如何获取当前运行文件的目录?

新手上路,请多包涵

在 nodejs 中我使用 __dirname 。这在 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 中,这是正确的方式还是惯用的方式?

原文由 ekanna 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 732
2 个回答

这应该这样做:

 import (
    "fmt"
    "log"
    "os"
    "path/filepath"
)

func main() {
    dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
    if err != nil {
            log.Fatal(err)
    }
    fmt.Println(dir)
}

原文由 Gustavo Niemeyer 发布,翻译遵循 CC BY-SA 3.0 许可协议

编辑:从 Go 1.8(2017 年 2 月发布)开始,推荐的方法是使用 os.Executable

func Executable() (string, error)

可执行文件返回启动当前进程的可执行文件的路径名。无法保证该路径仍指向正确的可执行文件。如果使用符号链接启动进程,根据操作系统的不同,结果可能是符号链接或它指向的路径。如果需要稳定的结果,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 可能会返回其中任何一个。

例如:

 package main

import (
    "fmt"
    "os"
)

func main() {
    pwd, err := os.Getwd()
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    fmt.Println(pwd)
}

原文由 Intermernet 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题