MGA: Modern Go Application tool
Go application development tool applying modern practices.
The mga
tool is an experimental collection of tools and practices related to developing Go applications.
Its goal is to make the maintenance of applications, thus the life of developers easier.
Currently it includes code generators and scaffolding tools:
- Go kit endpoint generator (based on a service interface)
- Testify mock generator (similar to mockery)
- Event dispatcher generator (based on event interface) (compatible with Watermill)
- Event handler generator (based on event structs) (compatible with Watermill)
Roadmap:
- Application scaffolding (based on Modern Go Application)
- Go kit service scaffolding
- Go kit transport scaffolding/code generator
- and more
See the Modern Go Application for a detailed usage example.
Installation
Download a prebuilt binary from the Releases page, or install the tool from source:
go get sagikazarmark.dev/mga
Usage
Endpoint generator
An endpoint can be generated based on a service interface:
package my
import (
"context"
)
// +kit:endpoint
// Service is a business service.
type Service interface{
// DoSomething is a service call.
//
// Named parameters and results are optional, but they make the generated code nicer.
DoSomething(ctx context.Context, myparam string) (id string, err error)
}
Then run the generator:
mga generate kit endpoint ./...
See Modern Go Application for an example.
Testify mock generator
package my
// +testify:mock
// Service is a business service.
type Service interface{}
// +testify:mock:testOnly=true
// Service2 is a business service.
type Service2 interface{}
mga generate testify mock ./...
Event dispatcher generator
package my
import (
"context"
)
// +mga:event:dispatcher
type Events interface{
MyEvent(ctx context.Context, ev MyEvent) error
}
type MyEvent struct{}
mga generate event dispatcher ./...
See Modern Go Application for an example.
Event handler generator
package my
// +mga:event:handler
type Event struct{
ID string
MyParam string
}
mga generate event handler ./...
See Modern Go Application for an example.
Development
Contributions are welcome! :)
- Clone the repository
- Make changes on a new branch
- Run the test suite:
./pleasew build ./pleasew test ./pleasew gotest ./pleasew lint
- Commit, push and open a PR
License
The MIT License (MIT). Please see License File for more information.