Ошибка при сборке модулей Go с использованием структуры / cmd - PullRequest
0 голосов
/ 02 ноября 2018

Я новичок в использовании модулей, и я использую их в новом проекте, который я пытаюсь смоделировать после структуры, описанной здесь

Вот пример моей структуры каталогов:

.
├── cmd
│   └── app_name
│       └── main.go
├── go.mod
├── go.sum
├── internal
│   └── bot
│       └── bot.go
└── pkg
    ├── website_name
    │   ├── client.go
    │   ├── client.options.go
    │   ├── server.go
    │   └── server.options.go
    └── lib
        └── lib.go
  1. Это идиоматически правильно? Я знаю, что там не так много консенсуса, но я бы хотел следовать лучшим практикам.
  2. Когда я запускаю go build, я получаю «неожиданный путь к модулю» github.com/ragurney/app_name/cmd/app_name », но когда я запускаю go build ./..., это работает. Почему?

Когда я перемещаю main.go на верхний уровень, все работает как положено. Разве я не должен использовать шаблон /cmd с модулями?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Из того, что я могу сказать, нет ничего плохого в структуре вашего проекта. Что мне помогло, так это запустить команду go build / run из корня проекта

например. go run github.com/username/project/cmd/somecommand

go build -o somebinary github.com/username/project/cmd/somecommand

0 голосов
/ 02 ноября 2018

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

Чтобы ответить на ваш второй вопрос, причина, по которой go build ./... работает, а не go build из корневого каталога, заключается в том, что ./... запускается в текущем каталоге (корне) и ищет все точки входа в программу и строит их. Когда вы перемещаете main.go в корневой каталог, с этой новой информацией, go build работает, тогда имеет смысл, так как это только поиск в текущем каталоге.

Вы можете явно сказать go build ./cmd/app_name, что также будет работать.

Структура вашего приложения отлично работает с модулями, так как я использую что-то очень похожее на это (https://www.ardanlabs.com/blog/2017/02/package-oriented-design.html) и модули работают очень хорошо для меня.

...