An open API service indexing awesome lists of open source software.

https://github.com/kujtimiihoxha/gk

Go-Kit Genetator
https://github.com/kujtimiihoxha/gk

cli generator go-kit golang kit-generator

Last synced: 8 months ago
JSON representation

Go-Kit Genetator

Awesome Lists containing this project

README

          

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

:information_source: If you want a more advanced (but somewhat more opinionated) version of `gk` you can find it [here](https://github.com/kujtimiihoxha/kit). :information_source:

## Why?

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

## Installation
```bash
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](https://drive.google.com/open?id=0B11R03qTqELWbk9nYXRtOTRQdDg)

The final folder structure is the same as [addsvc](https://github.com/peterbourgon/go-microservices/tree/master/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](https://drive.google.com/open?id=0B11R03qTqELWZE9mcEhZVHhFWFk)

e.x adding thrift:
```bash
gk add thrift hello
```
This generator will work similar as the `grpc` generator.

[Example GIF](https://drive.google.com/open?id=0B11R03qTqELWbE9VeFB2ZDdhb2c)

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