一尘不染

您如何确定go中当前正在运行的可执行文件的完整路径?

go

我一直在osx上使用此功能:

// Shortcut to get the path to the current executable                      
func ExecPath() string {                                                   
  var here = os.Args[0]                                                    
  if !strings.HasPrefix(here, "/") {                                       
    here, _ = exec.LookPath(os.Args[0])                                    
    if !strings.HasPrefix(here, "/") {                                     
      var wd, _ = os.Getwd()                                               
      here = path.Join(wd, here)                                           
    }                                                                      
  } 
  return here                                                              
}

…但是它很凌乱,它根本无法在Windows上运行,当然也不能在Windows上的git-bash中运行。

有没有办法做这个跨平台?

注意 具体来说,args [0]取决于二进制文件的调用方式。在某些情况下,它仅是二进制本身,例如。“ app”或“ app.exe”;所以你不能只使用它。


阅读 332

收藏
2020-07-02

共1个答案

一尘不染

我认为这是传统的操作方式,我认为它可以在任何平台上使用。

import (
    "fmt"
    "os"
    "path/filepath"
)

// Shortcut to get the path to the current executable                      
func ExecPath() string {
    var here = os.Args[0]
    here, err := filepath.Abs(here)
    if err != nil {
        fmt.Printf("Weird path: %s\n", err)
    }
    return here
}
2020-07-02