func MakeGetEndpoint(srv Service) endpoint.Endpoint {
return func(ctx context.Context, request interface{}) (interface{}, error) {
_ = request.(getRequest) // we really just need the request, we don't use any value from it
d, err := srv.Get(ctx)
if err != nil {
return getResponse{d, err.Error()}, nil
}
return getResponse{d, ""}, nil
}
}
// mapping endpoints
endpoints := napodate.Endpoints{
GetEndpoint: napodate.MakeGetEndpoint(srv)
}
func (e Endpoints) Get(ctx context.Context) (string, error) {
req := getRequest{}
resp, err := e.GetEndpoint(ctx, req)
if err != nil {
return "", err
}
getResp := resp.(getResponse)
if getResp.Err != "" {
return "", errors.New(getResp.Err)
}
return getResp.Date, nil
}
我们如何确保 e.GetEndpoint(ctx, req) 期间使用的 ctx 与 MakeEndpoint 中使用的 ctx 相同。我知道它们是映射的,但这个映射实际上意味着什么,因为 MakeGetEndpoint 只接受 srv 参数,但 GetEndpoint 传递 ctx 和 req。另外,MakeEndpoint 何时实际执行以及它如何访问 srv、ctx 和 request。