Understanding endpoints

A Go kit microservice is really just a set of endpoints. Each endpoint corresponds to one method in your service interface. An endpoint is always associated with at least one transport and a handler that you implement to service the request. The Go kit endpoints support the RPC style of communication and have request and response structs.

Here is the factory function for the Follow() method endpoint:

func makeFollowEndpoint(svc om.SocialGraphManager) endpoint.Endpoint {
return func(_ context.Context, request interface{}) (interface{}, error) {
req := request.(followRequest)
err := svc.Follow(req.Followed, req.Follower)
res := followResponse{}
if err != nil {
res.Err = err.Error()
}
return res, nil
}
}

I will explain what's going on here soon. For now, just note that it accepts an svc argument of the om.SocialGraphManager type, which is an interface, and it invokes its Follow() method.