Почему нельзя идти строить с абсолютного пути?

по какой-то причине я хочу построить проект 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 здесь.