【发布时间】:2010-05-11 21:31:11
【问题描述】:
如果我的 go 程序可以以不同的方式(cron、monit 等)执行,那么在运行时获取包含可执行文件的目录的最可靠方法是什么?
在 python 中,这将是变量:
os.path.realpath(__file__)
【问题讨论】:
-
这假定可执行文件有一个路径......
标签: go
如果我的 go 程序可以以不同的方式(cron、monit 等)执行,那么在运行时获取包含可执行文件的目录的最可靠方法是什么?
在 python 中,这将是变量:
os.path.realpath(__file__)
【问题讨论】:
标签: go
这可能和 C 中的一样,换句话说,没有可移植的万无一失的方法。见How do I find the location of the executable in C?
【讨论】:
Andrew Brookins 在“Go: How to Get the Directory of the Current File”中提出了一个快速修复(不一定是通用的):
我最终发现了
runtime.Caller()。
这将返回有关当前 goroutine 堆栈的一些详细信息,包括文件路径。我的问题是在共享包中打开一个数据文件。
我做的是:
_, filename, _, _ := runtime.Caller(1)
f, err := os.Open(path.Join(path.Dir(filename), "data.csv"))
【讨论】:
我发现最好的方法是使用os.Getwd()。请参阅此处的文档:golang doc
【讨论】: