Go-kit generator is a cli application that generates boilerplate code for your go-kit services.
ℹ️ If you want a more advanced (but somewhat more opinionated) version of gk you can find it here. ℹ️
Because I'm lazy, and because it would make it easier for go-kit newcomers to start using it.
go get github.com/kujtimiihoxha/gk
go install github.com/kujtimiihoxha/gkgk must be run from a project inside the specified $GOPATH for it to work.
When it is run for the first time it will search for gk.json configuration file, if it does not find it it will create one
with the default settings.
Inside the project run:
gk new service helloor the shorter command:
gk n s hellothis will create a new service called HelloService inside :
project
└───hello
│ └───pkg
│ │ └───service
│ │ │ service.go
service.go
package service
// Implement yor service methods methods.
// e.x: Foo(ctx context.Context,s string)(rs string,err error)
type HelloService interface {
}Now you need to add the interface methods and initiate your service: e.x:
package service
import "context"
// Implement yor service methods methods.
// e.x: Foo(ctx context.Context,s string)(rs string,err error)
type HelloService interface {
Foo(ctx context.Context,s string)(rs string,err error)
}than run :
gk init hellothis will create the service struct , methods, endpoints, transport .
The final folder structure is the same as addsvc
By Default the generator will use default_transport setting from gk.json and create the transport. If you want to specify
the transport use -t flag
gk init hello -t grpcTo add another transport to your existing service use gk add [transporteType] [serviceName]
e.x adding grpc:
gk add grpc helloFor grpc and thrift after you execute the above command you will see this message :
INFO[0000] Generating grpc transport...
WARN[0000] --------------------------------------------------------------------
WARN[0000] The service is still not ready!!
WARN[0000] To create the grpc transport please create your protobuf.
WARN[0000] Than follow the instructions in compile.sh and compile the .proto file.
WARN[0000] After the file is compiled run `gk init grpc hello`.
WARN[0000] -------------------------------------------------------------------- to complete the generation of the grpc transport you need to implement the protobuffer and compile it, the compile script
with instructions on how to install proto is generated by gk. After you compile the protobuffer run:
gk init grpc helloAfter this the handler.go file will be created and you will only need to implement the Decode/Encode of the grpc message.
e.x adding thrift:
gk add thrift helloThis generator will work similar as the grpc generator.
The folder structure that the generator is using is following go-kit/kit#70 but
that can be changed using gk.json all the paths are configurable there.
Every command has the -h or --help flag this will give you more info on what the command does and how to use it.
e.x
gk init -hwill return
Initiates a service
Usage:
gk init [flags]
Flags:
-t, --transport string Specify the transport you want to initiate for the service
Global Flags:
-d, --debug If you want to se the debug logs.
--folder string If you want to specify the base folder of the project.
-f, --force Force overide existing files without asking.
--testing If testing the generator.
The example you see here go-kit/kit#70
You can find examples under the test_dir
- Implement the update commands, this commands would be used to update an existing service e.x add a new request parameter to an endpoint(Probably not needed).
- Implement middleware generator (service,endpoint).
- Implement automatic creation of the service main file.
- Tests tests tests ...
- I only tested this on the mac, should work on other os-s but I have not tested it, I would appreciate feedback on this.
Thanks a lot for contributing.
To test your new features/bug-fixes you need a way to run gk inside your project this can be done using test_dir.
Execute this in your command line :
export GK_FOLDER="test_dir" Create a folder in the gk repository called test_dir, now every time you run go run main.go [anything]
gk will treat test_dir as the project root.
If you edit the templates you need to run compile.sh inside the templates folder.