Go 'mod init' создает новые папки? каково значение пути? - PullRequest
0 голосов
/ 13 января 2020

Всего 3 дня опыта работы на Go языке. Надеюсь, что пример будет более подходящим для понимания моей путаницы.

root@freebsd1:/usr/home/arun/go-start/src/test2 # go mod init f1/f2/f3/f4/f5/hello
go: creating new go.mod: module f1/f2/f3/f4/f5/hello
root@freebsd1:/usr/home/arun/go-start/src/test2 #

Здесь в приведенном выше примере go mod init создает все эти папки (f1/f2/f3/f4/f5/hello) ?. Я много искал, не мог найти такие папки в системе. Тогда каково значение этого пути.

Даже если приведенная ниже команда не будет выполняться, если этот путь не указан, как он

# go install f1/f2/f3/f4/f5/hello

1 Ответ

3 голосов
/ 13 января 2020

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 Код: Код организация

...