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

问题描述

这应该这样做:

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)
}

编辑:从 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 可能会返回其中的任何一个。

例如:

package main

import (
    "fmt"
    "os"
)

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

解决方法

在 nodejs 中,我使用__dirname。Golang 中的 this 等价于什么?

我用谷歌搜索并找到了这篇文章。他使用以下代码的地方

_,filename,_,_ := runtime.Caller(1)
f,err := os.Open(path.Join(path.Dir(filename),"data.csv"))

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...