Если моя программа go может выполняться разными способами (cron, monit и т. Д.), Каков самый надежный способ получить каталог, содержащий исполняемый файл, во время выполнения?
В python это будет переменная:
os.path.realpath(__file__)
Вероятно, это то же самое, что и в C, другими словами, нет переносимого метода защиты от ошибок. См. Как найти расположение исполняемого файла в C?
Одно быстрое исправление в ходу (не обязательно универсальное) предлагает Эндрю Брукинс в " Go: Как получить каталог текущего файла":
В конце концов я узнал о runtime.Caller(). Это возвращает несколько подробностей о стеке текущей программы, включая путь к файлу. В контексте моей проблемы было открытие файла данных в общем пакете. То, что я приготовил, было:
В конце концов я узнал о runtime.Caller(). Это возвращает несколько подробностей о стеке текущей программы, включая путь к файлу.
runtime.Caller()
В контексте моей проблемы было открытие файла данных в общем пакете. То, что я приготовил, было:
_, filename, _, _ := runtime.Caller(1) f, err := os.Open(path.Join(path.Dir(filename), "data.csv"))
Лучший способ, который я нашел, это использовать os.Getwd(). Смотри документацию здесь: Голанг Док
os.Getwd()