github.com/micro/go-micro/examples@v0.0.0-20210105173217-bf4ab679e18b/wrapper/cli/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"context"
     7  	proto "github.com/micro/go-micro/examples/service/proto"
     8  	"github.com/micro/go-micro/v2"
     9  	"github.com/micro/go-micro/v2/client"
    10  )
    11  
    12  // log wrapper logs every time a request is made
    13  type logWrapper struct {
    14  	client.Client
    15  }
    16  
    17  func (l *logWrapper) Call(ctx context.Context, req client.Request, rsp interface{}, opts ...client.CallOption) error {
    18  	fmt.Printf("[wrapper] client request service: %s method: %s\n", req.Service(), req.Endpoint())
    19  	return l.Client.Call(ctx, req, rsp)
    20  }
    21  
    22  // Implements client.Wrapper as logWrapper
    23  func logWrap(c client.Client) client.Client {
    24  	return &logWrapper{c}
    25  }
    26  
    27  func main() {
    28  	service := micro.NewService(
    29  		micro.Name("greeter.client"),
    30  		// wrap the client
    31  		micro.WrapClient(logWrap),
    32  	)
    33  
    34  	service.Init()
    35  
    36  	greeter := proto.NewGreeterService("greeter", service.Client())
    37  
    38  	rsp, err := greeter.Hello(context.TODO(), &proto.Request{Name: "John"})
    39  	if err != nil {
    40  		fmt.Println(err)
    41  		return
    42  	}
    43  
    44  	fmt.Println(rsp.Greeting)
    45  
    46  }