I'm not sure if this is the kind of Go app you mean, but I have a social networking app which is definitely a medium-sized project (with 51 database tables and at least as many controllers, with typically a full CRUD set of controllers for each and then some). I have a stripped back, open source version of the app here to take a look: https://github.com/cuvou/gosocial To keep the code maintainable, especially for the controllers (to group them into logical folders by feature, so when I wanna find "where was the edit controller for photos?" it's under "pkg/controller/photos") I have the app split into a tree of subpackages.
Thanks, this is super helpful, especially the context of a medium-sized social app. I like the idea of grouping controllers by feature and then splitting into subpackages under pkg/ – that sounds much more navigable than a flat “controllers” dump. I’ll take a look at the repo, thanks for sharing. In your experience, did you ever feel the need to introduce a more explicit “domain” or “use case” layer on top of that, or did grouping by feature + clear controllers stay enough as the project grew?