我使用Go为各种平台编译一个程序,并通过调用相对路径或仅通过其名称(如果它在PATH变量中)来运行它.
是否有可能找出可执行文件的位置?
说,我的程序叫做" foo(.exe)".我可以运行./foo,foo(如果它在PATH) ../../subdir/subdir/foo.
我试过使用os.Args[0],我想我应该检查程序名称是否包含除"foo"之外的其他内容.如果是,则使用filepath.Abs,如果不是,则使用(我找不到函数名称,有一个函数可以通过PATH查看程序的位置).
Dob*_*ort 45
使用包osext.
它提供的函数Executable()返回当前程序可执行文件的绝对路径.它可以在系统之间移植.
package main
import (
    "github.com/kardianos/osext"
    "fmt"
)
func main() {
    filename, _ := osext.Executable()
    fmt.Println(filename)
}
iam*_*ual 26
您可以使用os.ExecutableGo 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)
}