如何编写打印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
答案 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.Args
和filepath.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包应该是跨平台的,如果可能的话)