在运行时获取可执行文件路径的最佳方法是什么?

发布于 2024-09-01 12:40:59 字数 149 浏览 5 评论 0原文

如果我的 go 程序可以以不同的方式执行(cron、monit 等),那么在运行时获取包含可执行文件的目录的最可靠方法是什么?

在 python 中,这将是变量:

os.path.realpath(__file__)

If my go program can be executed in different ways (cron, monit, etc..), what's the most reliable way to get the directory that contains the executable, during runtime?

In python, this would be the variable:

os.path.realpath(__file__)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

衣神在巴黎 2024-09-08 12:40:59

可能和C中的一样,换句话说,没有一个可移植的万无一失的方法。请参阅如何找到C 中的可执行文件?

It's probably the same as in C, in other words, there isn't a portable fool-proof method. See How do I find the location of the executable in C?

帅哥哥的热头脑 2024-09-08 12:40:59

Andrew Brookins 在《Go》中提出了一种快速修复方法(不一定是通用的) Go:如何获取当前文件的目录”:

我最终发现了runtime.Caller() .
这将返回有关当前 goroutine 堆栈的一些详细信息,包括文件路径。

我的问题的背景是打开共享包中的数据文件。
我煮的是:

_, filename, _, _ := runtime.Caller(1)
f, err := os.Open(path.Join(path.Dir(filename), "data.csv"))

One quick fix in go (not necessary a universal one) is proposed by Andrew Brookins in "Go: How to Get the Directory of the Current File":

I eventually found out about runtime.Caller().
This returns a few details about the current goroutine’s stack, including the file path.

The context of my problem was opening a data file in a shared package.
What I cooked up was:

_, filename, _, _ := runtime.Caller(1)
f, err := os.Open(path.Join(path.Dir(filename), "data.csv"))
香橙ぽ 2024-09-08 12:40:59

我发现最好的方法是使用 os.Getwd()。请参阅此处的文档:golang doc

The best way I found is to use os.Getwd(). See documentation here: golang doc

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文