Чтобы ответить на ваш первый вопрос, он полностью самоуверенный, и все, что вам нравится больше всего, также легко понять для других, с кем вам следует согласиться (я думаю, что это хорошо).
Чтобы ответить на ваш второй вопрос, причина, по которой go build ./...
работает, а не go build
из корневого каталога, заключается в том, что ./...
запускается в текущем каталоге (корне) и ищет все точки входа в программу и строит их. Когда вы перемещаете main.go
в корневой каталог, с этой новой информацией, go build
работает, тогда имеет смысл, так как это только поиск в текущем каталоге.
Вы можете явно сказать go build ./cmd/app_name
, что также будет работать.
Структура вашего приложения отлично работает с модулями, так как я использую что-то очень похожее на это (https://www.ardanlabs.com/blog/2017/02/package-oriented-design.html) и модули работают очень хорошо для меня.