# Go micro

The Go micro transport implementation could be used to call [go-micro](https://github.com/micro/go-micro/) services. Basic implementations are available inside the [CLI](https://jexia.gitbook.io/semaphore/getting-started/cli). It is advised to implement your own custom implementation when wanting to have fine grained control over the go-micro options.

```go
package main

import (
    "github.com/jexia/maestro"
    "github.com/jexia/maestro/codec/json"
    "github.com/jexia/maestro/protocol/micro"
    "github.com/micro/go-micro/service/grpc"
)

func main() {
    // gRPC service constructor
    service := grpc.NewService()

    client, err := maestro.New(
            maestro.WithCodec(json.NewConstructor()),
            maestro.WithCaller(micro.New("micro-grpc", service)),
    )
    
    err = client.Serve()
}
```

{% hint style="info" %}
Check out the [go-micro documentation](https://go-micro.dev/) for more info
{% endhint %}
