#go #godeps #go-modules #govendor
#Вперед #godeps #go-модули #govendor
Вопрос:
В настоящее время я использую Dep и хотел бы начать использовать модули Go.
Как мне выполнить миграцию?
Ответ №1:
Переход с модулей Dep на Go очень прост.
- Запустите
go version
и убедитесь, что вы используете Go версии 1.11 или более поздней. - Переместите свой код за пределы GOPATH или set
export GO111MODULE=on
. go mod init [module path]
: Это приведет к импорту зависимостей из Gopkg.lock.go mod tidy
: Это удалит ненужный импорт и добавит косвенные.- (Необязательно) Удалите папку поставщика (
rm -rf vendor/
или переместите в корзину) go build
: Выполните тестовую сборку, чтобы проверить, работает ли она.rm -f Gopkg.lock Gopkg.toml
: Удалите устаревшие файлы, используемые для Dep.
Go импортировал мои зависимости из Dep, прочитав Gopkg.lock
файл, а также создал go.mod
файл.
Если вы хотите сохранить свою папку поставщика:
- Запустите
go mod vendor
, чтобы скопировать ваши зависимости в папку поставщика. - Запустите
go build -mod=vendor
, чтобы убедитьсяgo build
, что используется ваша папка поставщика.
Комментарии:
1. После того, как я запустил их при попытке сборки, я получаю эту ошибку
clang: error: unable to read SDK settings for '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk'
2. @Surya попробуйте обновить свои инструменты командной строки:
xcode-select --install
3. Да, я сделал это и сделал это тоже xcode-select —switch / Library / Developer / CommandLineTools/ Все еще не повезло @Nicholas
4. Будьте осторожны с шагом 5. Если в вашем репозитории есть папка поставщика, вполне возможно, что в ней содержатся некоторые материалы, недоступные в противном случае
Ответ №2:
Чтобы добавить к ответу @Nicholas:
Вот из официальной документации golang:
Чтобы создать go.mod для существующего проекта:
- Перейдите к корню исходного дерева модуля за пределами GOPATH:
$ export GO111MODULE=on # manually active module mode
$ cd $GOPATH/src/<project path> # e.g., cd $GOPATH/src/you/hello
- Создайте начальное определение модуля и запишите его в файл go.mod:
$ go mod init
Этот шаг преобразует из любого существующего dep Gopkg.заблокировать файл или любой из других девяти поддерживаемых форматов зависимостей, добавив инструкции require в соответствии с существующей конфигурацией.
- Создайте модуль. При выполнении из корневого каталога модуля шаблон ./… соответствует всем пакетам в текущем модуле. go build автоматически добавит отсутствующие или неконвертированные зависимости по мере необходимости для удовлетворения импорта для этого конкретного вызова сборки:
$ go build ./...
- Протестируйте настроенный модуль, чтобы убедиться, что он работает с выбранными версиями:
$ go test ./...
-
(Необязательно) Запустите тесты для вашего модуля, а также тесты для всех прямых и косвенных зависимостей для проверки несовместимости:
$ go test all
Ответ №3:
Еще один способ обновления до модулей.
-
Удалите Gopkg.toml и Gopkg.lock
rm Gopkg.*
-
Инициализируйте модули Go
GO111MODULE=on go mod init
-
Запустите go mod tidy, чтобы извлечь все косвенные модули и удалить неиспользуемые модули
GO111MODULE=on go mod tidy
-
Запустите сборку, чтобы убедиться, что все работает нормально
go build
Совет в случае, если вы столкнулись с несколькими не найденными модулями, вручную обновите тег modules в файле go.mod.