Прежде чем я отвечу на ваш вопрос, вам необходимо понять, как golang управляет своими пакетами и зависимостями.
Чтобы загрузить пакеты, используйте команду go get
.Пример использования:
$ go get github.com/stretchr/testify
Приведенная выше команда загружает пакет testify, а затем сохраняет его локально в рабочем пространстве со структурой, следующей за его URL ( TL; DR путь к рабочему пространствузарегистрирован как $GOPATH
переменная env).
$GOPATH/src/github.com/stretchr/testify
Объяснение из документа , почему имя загруженного пакета будет следовать за его URL:
Получитьзагружает пакеты, названные путями импорта, вместе с их зависимостями.
Теперь о вашем вопросе:
Почему многие проекты golang напрямую импортируются из GitHub?
Заявление import "github.com/stretchr/testify/assert"
не означает, что пакет напрямую импортируется с веб-сайта github (через http) .Он импортирован из вашего локального, с github.com/stretchr/testify
пути в $GOPATH/src
.Пакет был загружен и сохранен там ранее, поэтому его можно импортировать в любой проект.
Ниже приведено объяснение документации об операторах импорта:
Путь Go ($GOPATH
) используется для разрешения операторов импорта.
Также взгляните на приведенный ниже код (взят из моего локального).
$ echo $GOPATH
/Users/novalagung/Documents/go
$ go get -u github.com/stretchr/testify
# package will be downloaded into $GOPATH/src folder using the same structure as the github url
$ tree -L 1 $GOPATH/src/github.com/stretchr/testify
/Users/novalagung/Documents/go/src/github.com/stretchr/testify
├── Gopkg.lock
├── Gopkg.toml
├── LICENSE
├── README.md
├── _codegen
├── assert
├── doc.go
├── http
├── mock
├── package_test.go
├── require
├── suite
└── vendor
Итакесли вы хотите импортировать какие-либо пакеты, он должен находиться в папке $GOPATH/src
.
что, если это свидетельство перемещено в bitbucket?
Это не имеет никакого эффектав вашем локальном проекте, потому что требуемый пакет уже загружен ранее.Однако, если вы хотите обновить его, вам может понадобиться изменить путь к пакету, чтобы он соответствовал его новому URL, например, bitbucket.org/stretchr/testify/assert
?зависит от того, как выглядит новый URL-адрес bitbucket.
Но я не думаю, что владелец свидетельства сделает это, так как это сломает много людей кодов.