# #go #mux #gopath #go-packages
Вопрос:
Я пытаюсь научиться создавать веб-сервер с помощью go и mux. Я импортирую mux в основной файл.go как import github.com/gorilla/mux
. Однако, когда я пытаюсь запустить код. Я получаю следующую ошибку
no required module provides package github.com/gorilla/mux: go.mod file not found in current directory or any parent directory; see 'go help modules'
Мой ГОПАТ-это /Users/michiokaku/Study/go
Общая структура моих каталогов такова
go___
pkg
bin
my_codes___
main.go
Внутри pkg я нашел каталог с именем mux@v1.8.0 на тропинке pkg/mod/github.com/gorilla
. Я думаю, что это то, что я скачал с помощью go get -u github.com/gorilla/mux
. Но когда код запущен, я получаю ошибки.
В чем здесь проблема? Как мне решить эту проблему?
PS: Я использую mac.
Комментарии:
1. запуск
go mod init
в каталоге вашего проекта2. Попробовал это сделать. Это выдало ошибку » не удается определить путь к модулю для исходного каталога /Пользователей/мичиокаку/Учебы/go_my_codes (за пределами GOPATH, путь к модулю должен быть указан)».
3. Что они подразумевают под этим?
4. Нет, модули могут находиться вне gopath. Что ты натворил ? Это должно быть
go mod init <module_name>
5. О, ладно. Я просто запускаю режим go init. Я должен запустить мод go для инициализации github.com/gorilla/mux верно?
Ответ №1:
Прочитайте учебник: Начало работы с Go, если вы его еще не видели. Это довольно точно соответствует вашей ситуации.
Короче говоря:
- Запустите
go mod init example.com/projectname
, заменив последний аргумент именем вашего модуля. Это создастgo.mod
файл в текущем каталоге, который будет отслеживать ваши зависимости. Имя вашего модуля будет префиксом для всех пакетов в вашем модуле. - Запустить
go mod tidy
илиgo get github.com/gorilla/mux
добавитьgithub.com/gorilla/mux
в качестве зависимости.
Вы упомянули, что видели каталог pkg/mod/github.com/gorilla
ранее. Это часть кэша модулей Go, общего для всех проектов.
Комментарии:
1. Я последовал этому. и я получаю сообщение об ошибке, в котором говорится, что цикл импорта не разрешен
2. @MichioKaku Эта ошибка возникает, если пакет импортирует себя прямо или косвенно. В
go mod init
команде вы назвали свой проектgithub.com/gorilla/mux
? Если это так, измените имя на что-то другое, отредактировав строку модуля в go.mod или запустивgo mod edit -module=example.com/somethingelse
. Если нет, пожалуйста, добавьте дополнительную информацию.3. Что я должен написать здесь как что-то другое? Я действительно не понял вашего предложения. Не могли бы вы уточнить? Могу ли я просто заменить github.com/mypackage или что-то в этом роде? И использовать то же имя, чтобы импортировать его в мой код go?
4. @MichioKaku обновите свой вопрос, добавив содержимое
go.mod
файла, а также добавьте сообщение об ошибке всего цикла импорта, обычно в нем перечислены пакеты в цикле, что делает совершенно ясным, в чем проблема.5. @MichioKaku Если вы загружаете свой проект в любое место, куда его могут импортировать другие, используйте имя, соответствующее местоположению хранилища. Для GitHub это что-то вроде github.com/yourid/yourrepo. Если никто не будет импортировать пакеты в ваш проект, вы можете использовать любое допустимое имя, например «пример», «локальный» или «тест».