$ go версия 1.13.3
У меня есть структура папок следующим образом:
GOPATH
+---src
+--- my-api-server
+--- my-auth-server
+--- main.go
+--- my-utils
+--- uuid
+--- uuid.go
my-auth-server
использует my-api-server/my-utils/uuid
в качестве зависимости
Теперь, когда я использовал модульную систему на основе GOPATH, это работало нормально. Но при использовании go-модулей при запуске go run main.go
в my-auth-server
нем возвращается ошибка:
build command-line-arguments: cannot load my-api-server/my-utils/uuid: malformed module path "my-api-server/my-utils/uuid": missing dot in first path element
Есть идеи, как это решить?
go
go-modules
Аюш Гупта
источник
источник
Ответы:
go.mod
Файл должен находиться в корневом каталоге вашего проекта (в данном случаеmy-api-server/go.mod
).Первая часть пути модуля должна быть доменом / путем. Например, полный путь может быть
github.com/your-github-username/my-api-server
. Вы видите ошибку, потому что первая часть не является доменом (с точкой). Вам не нужно публиковать модуль для его разработки, но вам нужно использовать правильное доменное имя.Получив путь к модулю, вы можете импортировать пакеты, содержащиеся в этом модуле, используя полный путь к модулю + "/" + относительный путь к пакету. Например,
Поскольку
main.go
иuuid
содержатся в одном и том же модуле, вам не нуженrequire
оператор вgo.mod
файле для использованияuuid
пакета. Вы можете импортировать его как любой другой пакет, и он будет работать.Я рекомендую использовать
go build
и запускать полученный исполняемый файл, а не использовать его,go run
чтобы убедиться, что вы включили все необходимые файлы в процесс сборки.См. Https://blog.golang.org/using-go-modules для получения пошагового руководства по использованию модулей Go, включая второй пост из этой серии о том, как преобразовать проект для использования модулей.
источник
Проверьте пути импорта в файле main.go Мне пришлось вызывать весь путь импорта «github.com/[username]/[project-name]/views вместо [имя-проекта] / views, чтобы заставить его работать на моем конце».
источник
ПОТОМУ ЧТО ИДТИ НЕ МОЖЕТ НАЙТИ МОДУЛЬ !!!
Не помещайте свой проект в GOPATH ... это так запутанно
Вместо...
установить в .bashrc: export GO111MODULE = on
закройте все терминалы командной строки, затем снова откройте терминалы
перейти в корневую папку проекта
$ go mod init project_module_name
Это сгенерирует файл go.mod
Установите ваши пакеты с нужной вам версией:
go get -v github.com/golang/protobuf@v1.3.4
Затем запустите $
go run main.go
Теперь файл go.mod должен записывать версии пакетов, которые Golang будет использовать для запуска и сборки ...
Убедитесь, что вы используете правильные версии пакетов, проверив файл go.mod! Это должно выглядеть так: github.com/golang/protobuf v1.3.4
источник
Do not put your project inside GOPATH... that is so confusing
- Это конвенция, которую я особенно предпочитаю.missing dot in first path element
нетcannot resolve module
incorrect
?