如何在Go中找到正在运行的程序的安装目录?

时间:2012-05-12 13:06:36

标签: go

如何编写打印demo.go安装路径的demo.exe程序?

D:\>go build demo.go

demo.exe位于D:\。将demo.exe移至C:\Windows后,在D:\路径下(不在C:\Windows内)运行demo.exe应该打印C:\Windows。< / p>

下面的图片显示比这种情况不起作用(因为demo.exe总是得到它当前的执行路径,而不是它的真正路径)。这只是告诉你当前的执行目录,而不是包含该文件的目录 https://github.com/axgle/go/blob/master/may_app_path_bug.jpg

更新:窗口/ linux解决方案在这里 https://github.com/axgle/app

2 个答案:

答案 0 :(得分:3)

package main

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

func main() {
    path, err := filepath.Abs(os.Args[0])
    if err != nil { panic(err) }
    fmt.Println(path)
}

通过阅读os.Argsfilepath.Abs了解详情。

答案 1 :(得分:1)

有人可能会尝试从例如:

开始
package main

import "os"

func main() {
        println(os.Args[0])
}

$ go run main.go
/tmp/go-build135649844/command-line-arguments/_obj/a.out
$

(仅在Linux上测试过,但os包应该是跨平台的,如果可能的话)