неверно сформированный путь к модулю «xxxx / xxxx / uuid», пропущенная точка в первом элементе пути при миграции из модуля dep to go на основе GOPATH


12
$ 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

Есть идеи, как это решить?


Смотрите этот ответ: stackoverflow.com/a/55347424/1218512
— Colminator

Ответы:


10

go.modФайл должен находиться в корневом каталоге вашего проекта (в данном случае my-api-server/go.mod).

Первая часть пути модуля должна быть доменом / путем. Например, полный путь может быть github.com/your-github-username/my-api-server. Вы видите ошибку, потому что первая часть не является доменом (с точкой). Вам не нужно публиковать модуль для его разработки, но вам нужно использовать правильное доменное имя.

Получив путь к модулю, вы можете импортировать пакеты, содержащиеся в этом модуле, используя полный путь к модулю + "/" + относительный путь к пакету. Например,

import "github.com/your-github-username/my-api-server/my-utils/uuid"

Поскольку main.goи uuidсодержатся в одном и том же модуле, вам не нужен requireоператор в go.modфайле для использования uuidпакета. Вы можете импортировать его как любой другой пакет, и он будет работать.

Я рекомендую использовать go buildи запускать полученный исполняемый файл, а не использовать его, go runчтобы убедиться, что вы включили все необходимые файлы в процесс сборки.

См. Https://blog.golang.org/using-go-modules для получения пошагового руководства по использованию модулей Go, включая второй пост из этой серии о том, как преобразовать проект для использования модулей.


1

Проверьте пути импорта в файле main.go Мне пришлось вызывать весь путь импорта «github.com/[username]/[project-name]/views вместо [имя-проекта] / views, чтобы заставить его работать на моем конце».


-1

ПОТОМУ ЧТО ИДТИ НЕ МОЖЕТ НАЙТИ МОДУЛЬ !!!

Не помещайте свой проект в 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?
— Аюш Гупта

неверные версии пакетов имеют неправильный путь к файлу => причина, по которой Голанг не может найти правильный файл для запуска или сборки
— Руссо
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.