gk

by kujtimiihoxha

kujtimiihoxha / gk

Go-Kit Genetator

128 Stars 24 Forks Last release: about 3 years ago (v1.0) Apache License 2.0 28 Commits 1 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Go-Kit generator.

Go-kit generator is a cli application that generates boilerplate code for your go-kit services.

:informationsource: If you want a more advanced (but somewhat more opinionated) version of

gk
you can find it here. :informationsource:

Why?

Because I'm lazy, and because it would make it easier for go-kit newcomers to start using it.

Installation

go get github.com/kujtimiihoxha/gk
go install github.com/kujtimiihoxha/gk

Running the generator

gk
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.

Create a new service

Inside the project run:

bash
gk new service hello
or the shorter command:
bash
gk n s hello
this will create a new service called
HelloService
inside :
project
└───hello
│   └───pkg
│   │   └───service
│   │   │    service.go
service.go
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:
go
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 :
bash
gk init hello
this will create the service
struct
,
methods
,
endpoints
,
transport
.

Example GIF

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
bash
gk init hello -t grpc

Add other transports

To add another transport to your existing service use

gk add [transporteType] [serviceName]

e.x adding grpc:
bash
gk add grpc hello
For
grpc
and
thrift
after you execute the above command you will see this message :
bash
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:
bash
gk init grpc hello
After this the
handler.go
file will be created and you will only need to implement the
Decode/Encode
of the grpc message.

Example GIF

e.x adding thrift:

bash
gk add thrift hello
This generator will work similar as the
grpc
generator.

Example GIF

I don't like the folder structure!

The folder structure that the generator is using is following https://github.com/go-kit/kit/issues/70 but that can be changed using

gk.json
all the paths are configurable there.

Cli Help

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
bash
gk init -h
will return ```bash 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.

## What is working
The example you see here  https://github.com/go-kit/kit/issues/70

Examples

You can find examples under the test_dir

TODO-s

  • 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 ...

    Warnings

  • 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.

    Contribute

    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 :

```bash 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.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.