Go: "использование внутреннего пакета не разрешено" при запуске проекта Go, разветвленного из репозитория github
Я привыкаю к Go и пытаюсь понять, как это работает.
Поэтому я пытаюсь запустить тестовый код из моего репозитория zoonoo/go-ethereum, разветвленного из исходного репозитория https://www.github.com/ethereum/go-ethereum.
Когда я бегу go test .
под eth
каталог, я получаю следующую ошибку:
eth/api.go:37:2: use of internal package not allowed
37-я строка eth/api.go выглядит следующим образом: "github.com/ethereum/go-ethereum/internal/ethapi"
Означает ли это, что при разветвлении репозитория go вам нужно изменить путь всех зависимостей в коде, чтобы запустить код?
Поддерживает ли система пакетов Go форк репозитория вообще?
2 ответа
Как показано в другом проекте Go:
Клонирование вилки
Если вы хотите работать с форком InfluxDB, например, с вашим собственным форком, вы все равно должны следовать приведенной выше структуре каталогов. Но вместо того, чтобы клонировать основной репо, вместо этого клонируйте свой форк. Для работы с вилкой выполните следующие действия:
export GOPATH=$HOME/gocodez
mkdir -p $GOPATH/src/github.com/influxdb
cd $GOPATH/src/github.com/influxdb
git clone git@github.com:<username>/influxdb
Сохранение структуры каталогов $GOPATH/src/github.com/influenxdb необходимо для корректной работы импорта Go.
Замените имя /URL InfluxDB вашим проектом, и примените ту же идею.
В вашем случае вилка GitHub предназначена только для того, чтобы вы вернули свой вклад в нее и сделали запрос Pull от него.
Это не будет служить источником для go get
работать, так как пакеты не будут соответствовать вашему GitHub для URL репо.
Это связано с тем, что внутренние пакеты в go могут быть импортированы только пакетами в том же корневом каталоге. Это как пакет частных классов в Java. Если вы хотите редактировать код без переименования всех импортов пакетов, вам необходимо поддерживать ту же структуру папок, что и пакет, так что если github.com/zoonoo/go-ethereum
находится в вашем $GOPATH переименовать каталог в github.com/ethereum/go-ethereum
или создайте символическую ссылку и работайте из связанной директории.