Использование подпакетов с go mod локально - PullRequest
0 голосов
/ 19 ноября 2018

В моей файловой системе (не в $GOPATH) есть пакет go, называемый bitbucket.org/me/awesome.

~/awesome> tree
.
├── main.go
├── go.mod
├── go.sum
├── subpackageA
│   └── main.go

Мой go.mod выглядит следующим образом:

module bitbucket.org/me/awesome

require (
       ... # lots of external dependencies
)

replace bitbucket.org/me/awesome => ./

В main.go в моем каталоге верхнего уровня я вызываю подпакет следующим образом:

import "bitbucket.org/me/awesome/subpackageA"

что кажется нормальным.go get работает.Однако, когда я клонирую весь этот репозиторий где-то еще (скажем, в образе Docker) и запускаю go get в первый раз, я получаю ошибки вроде:

package bitbucket.org/me/awesome/subpackageA: https://api.bitbucket.org/2.0/repositories/me/awesome?fields=scm: 403 Forbidden,

, что означаетон не использует версию пакетов в локальной файловой системе, хотя я говорил об этом с помощью директивы replace в файле go.mod.

Что я делаю не так?Как я могу убедиться, что подпакеты используются из файловой системы вместо попыток получить их из Интернета?

1 Ответ

0 голосов
/ 19 ноября 2018

Go не имеет (реального) понятия "подпакет".Все пакеты в основном рассматриваются как равные.Это означает, что replace bitbucket.org/me/awesome не влияет на пакет bitbucket.org/me/awesome/subpackageA, поскольку это два отдельных, не связанных пакета.Расположение папок не вводит отношение subpackageA к awsome или наоборот *).

Поэтому необходимо добавить отдельную директиву замены для subpackageA

replace bitbucket.org/me/awesome/subpackageA => ./subpackageA

*) Nitpickingдля абсолютной корректности: расположение папок влияет на папки с именем internal (нельзя импортировать из других проектов), на папки с именем vendor (которые могут содержать фирменные пакеты) и поиск файла go.mod останавливается в корне репо,

...