【问题标题】:Find the path to the executable找到可执行文件的路径
【发布时间】:2012-08-18 21:11:15
【问题描述】:

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

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

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

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

【问题讨论】:

标签: path go


【解决方案1】:

使用包osext

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

Online documentation

package main

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

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

【讨论】:

  • 如果这也适用于go run executable.go,那就太好了。
  • 您可以随时在包裹问题跟踪器上提出请求:bitbucket.org/kardianos/osext/issues 但我不知道这是否可能。
  • @DobrosławŻybort 我在当前项目中使用 osext,它工作正常。
  • This 是适合我的原生解决方案
【解决方案2】:

您可以使用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)
}

【讨论】:

  • 很高兴知道,我会尝试并删除我以前的东西。
  • This 是另一个适合我的原生解决方案
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 2021-08-28
    • 2014-09-09
    • 1970-01-01
    • 2014-02-28
    • 2013-06-09
    • 2014-11-24
    • 2018-05-30
    • 2010-10-14
    相关资源
    最近更新 更多