go mod init
не создает эти папки. Вы передаете «путь к модулю» в go mod init
, который записан в файле go.mod
, который он создает.
«Путь к модулю» - это префикс пути импорта, соответствующий модулю root. Путь к модулю и относительный путь к модулю root вместе образуют полный путь импорта, который должен быть уникальным в приложении.
Так, например, если ваш модуль содержит папку с именем foo
(и пакет foo
в нем), он импортируется путем, являющимся modulepath/foo
. В вашем случае это будет f1/f2/f3/f4/f5/hello/foo
.
Допускается, чтобы moduleA
содержал пакет foo
, а также moduleB
имел пакет foo
. Когда используется / импортируется, первый будет импортирован как moduleA/foo
, последний как moduleB/foo
, поэтому однозначно, какой из них вы импортируете. Путь к модулю похож на пространство имен.
Рекомендуется использовать путь к модулю, который соответствует репозиторию, который вы планируете, или опубликует sh ваш модуль, поэтому, когда вы это сделаете, go get
сможет автоматически получить, собрать и установить ваш модуль. Например, вы можете выбрать путь к модулю github.com/bob/hello
, поэтому, когда вы публикуете sh ваш модуль, каждый может получить его, просто используя import "github.com/bob/hello"
в своем приложении.
Также обратите внимание, что вам не нужно опубликовать sh ваш код в удаленном репо, прежде чем вы сможете его построить. Но все же рекомендуется следовать этому шаблону, чтобы у вас было меньше работы, чтобы он заработал в будущем, если вы решите опубликовать его sh. Здесь нечего терять.
Больше в документации: Команда go: Определение модуля
Также: Как писать Go Код: Код организация