2016-04-25 8 views
1

Я пытаюсь понять относительное построение пути в Go. Вот моя проблема: У меня есть дерево папок:Относительный путь в Go

-root 
--main 
---utils 
---certs 
--tests 

Имея мои сертификаты закачанные в папке и сертификаты соединение util.go файл загружен в utils, у меня есть относительные пути, жестко закодированные в файле.

Проблема: Имея пути, указанные в utils/util.go, они отлично работают после вызова из main/main.go и выдают исключение (файл не найден) при вызове от tests/test.go.

Какой выход?

+3

Возможный дубликат [как ссылаться на относительный файл из кода и тестов] (http://stackoverflow.com/questions/31059023/how-to-reference-a-relative-file-from-code-and-tests) – icza

+0

Нет, он не выглядит дублированным. Там topicstarter использует некоторую структуру revel, когда для меня это не подходит для функциональных функций golang ... – ArkadyB

+0

Пожалуйста, прочитайте [ответ, который я дал там] (http://stackoverflow.com/a/31059125/1705598) и не блокируются словом «пить». – icza

ответ

1

Используйте go/build пакет, чтобы найти абсолютный путь пакета в Go рабочей области:

importPath := "github.com/user/root/main" // modify to match import path of main 
p, err := build.Default.Import(importPath, "", build.FindOnly) 
if err != nil { 
    // handle error 
} 
certsDir := filepath.Join(p.Dir, "certs") 

это работает только при запуске в контексте рабочего пространства Go (исходный код доступен и GOPATH установлен).