Получение полного пути к источнику пакета из пути импорта пакета

#go #gopath #go-packages

# #Вперед #gopath #перейти-пакеты

Вопрос:

В настоящее время у меня есть такой параметр, как str := "github.com/pkg/errors" . Мне нужен полный путь к пакету.

В настоящее время я добиваюсь этого с помощью build.Default.GOPATH "/src/" str .

Существует ли собственный, не хакерский способ определения полного пути к импорту (который может находиться в vendor папке и т. Д.).

Ответ №1:

Используйте пакет go / build для разрешения пути импорта в каталог:

  p, err := build.Default.Import("github.com/pkg/errors", ".", build.FindOnly)
 if err != nil {
     // handle error
 }
 d := p.Dir
 

Этот фрагмент разрешает локальный импорт относительно текущего рабочего каталога. Замените "." на "" , если вы не хотите разрешать локальный импорт или предоставлять другой каталог, если это необходимо.