首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取当前运行文件的目录?

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

Stack Overflow用户
提问于 2013-08-31 00:07:43
回答 9查看 229.9K关注 0票数 286

在nodejs中,我使用__dirname。在Golang中与此相当的是什么?

我已经在谷歌上找到了这篇文章http://andrewbrookins.com/tech/golang-get-directory-of-the-current-file/。他在其中使用了以下代码

代码语言:javascript
复制
_, filename, _, _ := runtime.Caller(1)
f, err := os.Open(path.Join(path.Dir(filename), "data.csv"))

但是在Golang中这是正确的方式还是惯用的方式呢?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-08-31 00:44:13

这应该可以做到:

代码语言:javascript
复制
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)
}
票数 251
EN

Stack Overflow用户

发布于 2013-08-31 21:02:37

使用package osext

它提供了函数ExecutableFolder(),该函数返回当前运行的程序可执行文件所在文件夹的绝对路径(对于cron作业很有用)。它是跨平台的。

Online documentation

代码语言:javascript
复制
package main

import (
    "github.com/kardianos/osext"
    "fmt"
    "log"
)

func main() {
    folderPath, err := osext.ExecutableFolder()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(folderPath)
}
票数 69
EN

Stack Overflow用户

发布于 2018-12-04 20:09:39

os.Executablehttps://tip.golang.org/pkg/os/#Executable

filepath.EvalSymlinkshttps://golang.org/pkg/path/filepath/#EvalSymlinks

完整演示:

代码语言:javascript
复制
package main

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

func main() {
    var dirAbsPath string
    ex, err := os.Executable()
    if err == nil {
        dirAbsPath = filepath.Dir(ex)
        fmt.Println(dirAbsPath)
        return
    }

    exReal, err := filepath.EvalSymlinks(ex)
    if err != nil {
        panic(err)
    }
    dirAbsPath = filepath.Dir(exReal)
    fmt.Println(dirAbsPath)
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18537257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档