| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | package endpointimport (	"context"	"errors"	"github.com/go-kit/kit/endpoint"	"github.com/longjoy/micro-go-course/section28/goods/service"	"golang.org/x/time/rate"	"log")type GoodsEndpoints struct {	GoodsDetailEndpoint endpoint.Endpoint	HealthCheckEndpoint endpoint.Endpoint}// 服务发现请求结构体type GoodsDetailRequest struct {	Id string}// 服务发现响应结构体type GoodsDetailResponse struct {	Detail service.GoodsDetailVO `json:"detail"`	Error  string                `json:"error"`}// 创建服务发现的 Endpointfunc MakeGoodsDetailEndpoint(svc service.Service, limiter *rate.Limiter) endpoint.Endpoint {	return func(ctx context.Context, request interface{}) (response interface{}, err error) {		if !limiter.Allow() {			// Allow返回false,表示桶内不足一个令牌,应该被限流,默认返回 ErrLimiExceed 异常			return nil, errors.New("ErrLimitExceed")		}		req := request.(GoodsDetailRequest)		detail, err := svc.GetGoodsDetail(ctx, req.Id)		var errString = ""		if err != nil {			errString = err.Error()			return &GoodsDetailResponse{				Detail: detail,				Error:  errString,			}, nil		}		return &GoodsDetailResponse{			Detail: detail,			Error:  errString,		}, nil	}}// HealthRequest 健康检查请求结构type HealthRequest struct{}// HealthResponse 健康检查响应结构type HealthResponse struct {	Status string `json:"status"`}// MakeHealthCheckEndpoint 创建健康检查Endpointfunc MakeHealthCheckEndpoint(svc service.Service) endpoint.Endpoint {	return func(ctx context.Context, request interface{}) (response interface{}, err error) {		log.Printf("helthcheck")		status := svc.HealthCheck()		return HealthResponse{			Status: status,		}, nil	}}
 |