Не удается найти модуль, предоставляющий пакет
Я не уверен, как решить проблему с зависимостями, которую я нахожу с помощью "go mod". Из того, что я мог собрать, он выбирает неправильную версию какой-либо субзависимости, которая указывает на репо, который больше не существует.
Я очень новичок, поэтому я уверен, что облажался, и я хотел бы помочь, чтобы понять, как это исправить. Пожалуйста, проверьте эти примеры:
Получение моей единственной зависимости с Go Get отлично работает
export GOPATH=`mktemp -d`
export MYAPP=`mktemp -d`
cd $MYAPP
cat << EOF > main.go
package main
import (
"fmt"
"os"
"github.com/kubernetes/minikube/pkg/storage"
)
func main() {
if err := storage.StartStorageProvisioner(); err != nil {
fmt.Printf("Error starting provisioner: %v\n", err)
os.Exit(1)
}
}
EOF
go get github.com/kubernetes/minikube/pkg/storage
go build && echo "WORKED" || echo "FAILED"
Тем не менее, получить его с модом Go не работает
export GOPATH=`mktemp -d`
export MYAPP=`mktemp -d`
cd $MYAPP
cat << EOF > main.go
package main
import (
"fmt"
"os"
"github.com/kubernetes/minikube/pkg/storage"
)
func main() {
if err := storage.StartStorageProvisioner(); err != nil {
fmt.Printf("Error starting provisioner: %v\n", err)
os.Exit(1)
}
}
EOF
go mod init github/my/repo
go build && echo "WORKED" || echo "FAILED"
Как мне заставить работать этот последний?
$ go version
go version go1.12 darwin/amd64
1 ответ
Согласно вики-модулям Go
Ежедневное обновление и понижение зависимостей должно выполняться с помощью команды 'go get', которая автоматически обновит файл go.mod. Кроме того, вы можете редактировать go.mod напрямую.
Насколько я понял, go mod init не получит ваши зависимости, скорее он инициализирует новый модуль и создаст файл мода для отслеживания версий зависимостей, которые использует ваш модуль.
Так что иди с зависимостями в порядке.
С другой стороны, модули Go в соответствии с вики снова обеспечат определенные функции:
Стандартные команды, такие как go build или go test, автоматически добавят новые зависимости по мере необходимости для удовлетворения импорта (обновление go.mod и загрузка новых зависимостей).
При необходимости можно выбрать более конкретные версии зависимостей с помощью таких команд, как go get foo@v1.2.3, go get foo@master, go get foo@e3702bed2 или путем непосредственного редактирования go.mod.