Пути к файлам для запуска golang кода для отладки и запуска - PullRequest
0 голосов
/ 17 марта 2020

У меня есть golang код на Linux VM, который я удаленно отлаживаю с помощью VS Code. Ниже приведена структура моей папки

MainFolder  
|__Config  
|__Other folders 
Other Files

Когда я запускаю код с помощью отладчика VS, он работает правильно, и мой код может найти путь к файлам. Но когда я использую терминал для кода (у меня настроено рабочее пространство и мне нужен другой проект для запуска и один проект для отладки) с использованием go run ./folder, при заполнении абсолютного пути он дает некоторый путь, например /tmp/go-build2342342342/b001/. Любая идея, почему это работает таким образом и как сделать поведение согласованным для правильного получения пути?

Ниже приведен код, преобразовывающий относительный путь в абсолютный

dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
    log.Fatal(err)
}
var path = filepath.Join(dir, relPath)
absPath, err := filepath.Abs(path)

1 Ответ

0 голосов
/ 19 марта 2020

Go двоичные файлы компилируются, даже если они запускаются через go run. Когда вы go run пакет, os.Args[0] задается путь к скомпилированному двоичному файлу в кэше сборки, а не каталог, содержащий исходный код для этого двоичного файла.

Чтобы определить путь к исходным файлам, Вы должны либо передать исходное местоположение явно (как флаг или явный аргумент), либо вызвать go run в известном каталоге и использовать os.Getwd для его нахождения.

Однако для отладки во время выполнения в частности, см. пакеты runtime и runtime/debug.

...