I am just starting out with Go, and so far so good. In smaller applications, it seems like there are no issues with having all of my files in the root of the application.
However, I'm working on an MVC-styled application (headless, skip the views for now), and in using the "package" or "module" pattern, I thought about organizing each component's parts into a directory where all the files belonged to a common package.
For example:
app.go
posts/
controller.go
model.go
users/
controller.go
model.go
Using the format above, app.go routes http requests to handlers based on route pattern (I'm using the gorilla mux
package):
import (
"github.com/gorilla/mux"
"net/http"
"users"
)
r.HandleFunc("/users", users.All)
r.HandleFunc("/users/{id}", users.Find)
...where users
is a package with a model and a controller. The users controller would handle the All and Find requests, and the users model in the users package do any query logic.
Is there a better convention for building and organizing an MVC app (say a blog) in Go? (I've also looked here and it was kind of helpful). In other stacks (ExpressJS, Rails, etc) I am used to having a common models, views, and controllers directory, but that would require that I package all the models as "models", and controllers as "controllers", etc.