找到可执行文件的路径

时间:2012-08-23 11:05:07

标签: path go

我使用Go为各种平台编译一个程序,并通过调用相对路径或仅通过其名称(如果它在PATH变量中)来运行它。

是否有可能找到可执行文件的位置?

说,我的程序名为“foo.exe)”。我可以运行./foofoo(如果它在PATH中),../../subdir/subdir/foo

我尝试使用os.Args[0],我想我应该检查程序名称是否包含除“foo”之外的其他内容。如果是,请使用filepath.Abs,如果不是,请使用(我找不到函数名称,有一个函数可以通过PATH查看程序的位置)。

3 个答案:

答案 0 :(得分:44)

使用包osext

它提供函数Executable(),它返回当前程序可执行文件的绝对路径。 它可以在系统之间移植。

Online documentation

package main

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

func main() {
    filename, _ := osext.Executable()
    fmt.Println(filename)
}

答案 1 :(得分:23)

您可以使用os.Executable获取Go 1.8或更高版本的可执行路径。

import (
    "os"
    "path"
    "log"
)

func main() {
    ex, err := os.Executable()
    if err != nil { log.Fatal(err) }
    dir := path.Dir(ex)
    log.Print(dir)
}

答案 2 :(得分:4)

这不是具体的(除非go“标准库”包含一些功能),并且没有可移植的解决方案。有关某些常见平台的解决方案,请参阅例How do I find the location of the executable in C?Finding current executable's path without /proc/self/exe