Проблема с корнем
Причина, по которой вы получаете эту ошибку, заключается в том, что вы определили два модуля, которые не знают, как найти друг друга на локальном диске.
$ go build
main.go:4:8: unknown import path "example.com/localModule/model":
cannot find module providing package example.com/localModule/model
Решение 1: replace
Вы можете добавить директиву replace
в файл go.mod
верхнего модуля, например:
replace example.com/localModule/model v0.0.0 => ./model
, который позволяет верхнему модулю найти другой модуль на диске. Более подробно это описано в разделе replace FAQ и "Многомодульные репозитории" на вики-модуле.
Тем не менее, это более сложное решение, которое может быть трудно понять правильно, обычно это более продолжительная работа и имеет некоторые ограничения, такие как replace
игнорируется для всех модулей, кроме текущего модуля. Для большинства людей многомодульное репо, вероятно, не то, что они хотят. В настоящее время относительно редко требуется иметь несколько модулей в одном репозитории.
Решение 2: один репо == один модуль
Хотя можно использовать директиву replace
, наиболее распространенным и простым решением является:
- В вашем хранилище должен быть один
go.mod
файл, а
- Поместите этот единственный файл
go.mod
в корень вашего хранилища.
Это очень простое решение, и оно означает, что ваши два пакета в репозитории смогут автоматически находить друг друга без необходимости replace
, что позволяет избежать сообщения об ошибке, о котором вы сообщили.
replace
с многомодульным репо по сравнению с одномодульным репо?
Рассказывает Расс Кокс в # 26664 :
Для всех, кроме опытных пользователей, вы, вероятно, захотите принять обычное соглашение, что один репо = один модуль. Для долгосрочного развития вариантов хранения кода важно, чтобы репо могло содержать несколько модулей, но это почти наверняка не то, что вы хотите сделать по умолчанию.
Если вы вместо этого хотите, чтобы в одном репозитории было определено несколько модулей, есть немало нюансов о том, как это сделать правильно, и есть весь раздел вики-модулей, который должен быть Прочтите о том, как управлять сложностью, связанной с несколькими модулями в одном репозитории, включая этот совет:
Добавление модулей, удаление модулей и управление версиями модулей с несколькими модулями в одном репозитории требует значительного внимания и тщательности, поэтому почти всегда проще и проще управлять одномодульным репозиторием , чем несколькими модулями. в существующем хранилище.