Где разместить файл go.mod - PullRequest
0 голосов
/ 16 октября 2018

У меня есть структура репозитория: -

xyz/src
      1. abc
            - p
            - q
            - r
      2. def
            - t
            - u
            - v
      3. etc
            - o
            - m
            - n

Я создал файл .mod в src и запустил go build. / ... За исключением локальных пакетов, все в порядке.Таким образом, если abc / p используется в def, он выдает следующее исключение: - не может найти модуль, предоставляющий пакет abc / p.Идея сохранения файла .mod в пакете src состояла в том, чтобы убедиться, что путь находится там, где находится файл мода.Кто-нибудь может подсказать, где в идеале должен быть файл мода?Также я попытался поместить его на один каталог выше в XYZ, но все еще та же проблема, а также я создал один для каждого подкаталога.Я немного запутался в этом.Придется ли мне создавать отдельный репозиторий для abc и т. Д. Но учитывая gopath, который раньше работал для того же, я думаю, что модуль также должен быть в состоянии сделать то же самое.Есть предложения?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Наиболее распространенный и самый простой подход - один файл go.mod в вашем хранилище, где этот единственный файл go.mod находится в корне вашего хранилища .

Рассказывает Расс Кокс в # 26664 :

Для всех, кроме опытных пользователей, вы, вероятно, захотите принять обычное соглашение, что один репо = один модуль.Для долгосрочного развития вариантов хранения кода важно, чтобы репо могло содержать несколько модулей, но это почти наверняка не то, что вы хотите сделать по умолчанию.

Вики Модули говорит :

Например, если вы создаете модуль для хранилища github.com/my/repo, который будет содержать два пакета с путями импорта github.com/my/repo/foo и github.com/my/repo/bar, тогдаПервая строка в вашем файле go.mod обычно объявляет путь к вашему модулю как module github.com/my/repo, и соответствующая структура на диске может быть:

repo/
├── go.mod      <<<<< Note go.mod is located in repo root
├── bar
│   └── bar.go
└── foo
    └── foo.go

В исходном коде Go пакеты импортируются с использованиемполный путь, включая путь модуля.Например, если модуль объявил свою идентичность в go.mod как module github.com/my/repo, потребитель мог бы сделать:

import "example.com/my/repo/bar"

Это импортирует пакет bar из модуля github.com/my/repo.

0 голосов
/ 17 октября 2018

У меня есть один go.mod в корне моего приложения go.Я использую следующую структуру, вдохновленную Kat Zien - Как вы структурируете свои приложения Go

В настоящий момент одно из моих приложений выглядит следующим образом

.
├── bin
├── cmd
│   ├── cli
│   └── server
│       └── main.go
├── pkg
│   ├── http
│   │   └── rest
|   │ # app-specific directories excluded
│   └── storage
│       └── sqlite

Всепакеты импортируются по их полному пути, то есть import "github.com/myusername/myapp/pkg/http/rest", иначе это вызывает проблемы повсюду, и это было единственное изменение, которое я должен был сделать, перейдя с $GOPATH на go mod.

go mod затем обрабатывает все обнаруженные зависимости должным образом, насколько я обнаружил до сих пор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...