неверно сформированный путь к модулю «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

Russo
источник
Do not put your project inside GOPATH... that is so confusing- Это конвенция, которую я особенно предпочитаю.
Аюш Гупта
Также ошибки missing dot in first path elementнетcannot resolve module
Аюш Гупта
Аюш Гупта, ошибка вызвана неправильным использованием модуля
Руссо
Определить incorrect?
Аюш Гупта
неверные версии пакетов имеют неправильный путь к файлу => причина, по которой Голанг не может найти правильный файл для запуска или сборки
Руссо