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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

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

提问于
用户回答回答于

这应该可以做到:

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)
}
用户回答回答于

func Executable() (string, error)可执行文件返回启动当前进程的可执行文件的路径名。不能保证路径仍然指向正确的可执行文件。如果使用符号链接启动进程,则取决于操作系统,结果可能是符号链接或它指向的路径。如果需要一个稳定的结果,那么path/filepath.EvalSymlink可能会有所帮助。

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

扫码关注云+社区