go-micro is a microservices framework with built-in service discovery, load balancing, messaging.
1// Server2package main34import (5 "context"6 "go-micro.dev/v5"7 proto "github.com/user/service/proto"8)910type Greeter struct{}1112func (g *Greeter) Hello(ctx context.Context, req *proto.HelloRequest,13 resp *proto.HelloResponse) error {14 resp.Greeting = "Hello " + req.Name15 return nil16}1718func main() {19 service := micro.NewService(20 micro.Name("greeter"),21 micro.Version("latest"),22 )2324 service.Init()2526 proto.RegisterGreeterHandler(service.Server(), &Greeter{})2728 if err := service.Run(); err != nil {29 log.Fatal(err)30 }31}3233// Client34func call() {35 service := micro.NewService(micro.Name("greeter-client"))36 service.Init()3738 greeter := proto.NewGreeterService("greeter", service.Client())3940 resp, err := greeter.Hello(context.Background(),41 &proto.HelloRequest{Name: "World"},42 )43 if err != nil {44 log.Fatal(err)45 }46 fmt.Println(resp.Greeting)47}
Features: