Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

One Go repository can produce several independent service processes without splitting shared code into separate repositories. In Antonio Towami’s commerce-platform implementation, four long-running binaries—site, shops, admin, and worker—share an internal/ package tree while retaining separate responsibilities. The result is a modular monolith: process-level separation with shared code and data contracts, rather than four independently developed microservices.

What the four services do

Each executable has its own entry point under cmd/. The split follows application responsibilities, not a rule that every feature must become its own service.

Binary Responsibility HTTP server
site Marketplace portal and country catalogs, served on the main domain and country subdomains Yes
shops Merchant storefronts on platform subdomains and custom domains Yes
admin Back-office panel Yes
worker Background jobs through Redis queues, including email, Telegram, and imports No

The repository also contains an importer command. Towami describes it as a CLI utility, not a fifth long-running service.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How the code stays shared without merging the applications

The four binaries draw from one internal/ package tree. The article sketches a familiar request path—router and middleware, handler, service, repository, then model and database—with templates and DTOs alongside those layers. Application-specific paths such as handler/site/, handler/shops/, and handler/admin/ keep the web applications distinct. Each binary imports only the packages it needs; notably, the worker does not import HTTP handlers or templates.

There are two different kinds of boundary here. Go enforces the import restriction for internal/: code outside the relevant parent tree cannot import those packages. The proposed layer order is not enforced by that directory convention. In Towami’s account, keeping dependencies flowing in the intended order relies on review and tests.

Why keep one repository?

Towami gives three reasons for keeping the applications together. They use shared product, shop, and user models; a change such as adding a database column can be carried across affected layers in one commit; and the separate binaries can be deployed as independent service units without requiring an orchestration platform, service mesh, or versioned APIs between these cooperating applications.

Those are the author’s reasons for this implementation, not measured savings or a claim that every team should choose the same layout. As he puts it: “A Go monorepo with one cmd/ entry point per service gives us process-level separation while keeping atomic refactors and one go.mod.”

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Separate processes alone do not make the system microservices. Shared code and data contracts leave these executables closely coordinated; “modular monolith” is the more useful description of the design in the article.

Builds and local development

The article says the four builds use CGO_ENABLED=0 and produce self-contained binaries, managed as independent service units. During development, each service runs in Docker with Air hot reload. A broad file watch can cause a change to shared code to rebuild services that do not need the affected packages.

Scope each Air watcher to its service

The described fix is to give each service its own watch configuration and exclude directories irrelevant to that process. For example, the worker excludes templates, handlers, routers, assets, and storage; the admin watcher excludes the site and shops handlers. The point is to keep unrelated application files from triggering that service’s rebuild, while still watching the shared code it actually uses.

This is a workflow detail, not evidence of a quantified speedup. The account does not establish build-time reductions or document production infrastructure beyond independent service units.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

When this boundary fits—and when to revisit it

Towami describes the setup as a good fit while applications share a schema and one team maintains them. His account flags independent ownership or a need for more independent deployment as reasons to reconsider the boundary, but it gives no numeric threshold for making that decision.

For a team weighing the same choice, the relevant axes are the degree of shared-schema coupling, how often changes need atomic edits across applications, whether teams need independent ownership, how independently services must be deployed, and the operational burden of separating them. These are decision questions inferred from the rationale, not results of a tested comparison between architectures.

Source and scope

This account is based on Antonio Towami’s implementation article, published September 24, 2026: DEV Community. It describes one team’s architecture and workflow; it is not an independent review or a benchmark.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.