Почему нельзя идти строить с абсолютного пути?
по какой-то причине я хочу построить проект go (docker swarm) из источника, следуя официальный док.
это работает хорошо, если я делаю:
...
cd $GOPATH/src/github.com/docker/swarm
go install .
но это не удается, если я попытаюсь "одной строкой" и избегать cd
:
go install $GOPATH/src/github.com/docker/swarm
ERROR: can't load package:
package <my go path>/src/github.com/docker/swarm:
import "<my go path>/src/github.com/docker/swarm":
cannot import absolute path
почему нельзя идти по этому абсолютному пути?
2 ответов
JimB правильно, пакеты относительно пути импорта. Нет возможности импортировать "абсолютно".
хотя он не прописан конкретно в спецификации, он ссылается на него в https://golang.org/ref/spec#ImportPath:
интерпретация пути импорта зависит от реализации, но обычно это подстрока полного имени файла скомпилированного пакета и может относиться к репозиторию установленных пакеты.
существуют варианты относительного импорта и вендоринга, которые могут работать для вас (см. Go 1.5 vendoring experiment, теперь доступный в 1.6 https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo/edit?pref=2&pli=1)
Я пришел сюда, чтобы найти ответ на тот же вопрос, поскольку я делал то же самое и обнаружил, что есть два способа сделать это...
поэтому я решил поделиться:
запуск из каталога пакетов:
cd $GOPATH/src/github.com/docker/swarm
go install .
и как относительно РЕПО:
go install github.com/docker/swarm
есть некоторые детали в официальных документах go здесь.