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__)
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__)
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?
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"))
The best way I found is to use os.Getwd()
. See documentation here: golang doc