endpoint.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package endpoint
  2. import (
  3. "context"
  4. "github.com/go-kit/kit/endpoint"
  5. "standard/gokit/server"
  6. )
  7. // endpoint.go 定义 Request、Response 格式, 并且可以使用闭包来实现各种中间件的嵌套
  8. // 就是声明 接收数据和响应数据的结构体 并通过构造函数创建
  9. // HelloRequest 请求格式
  10. type HelloRequest struct {
  11. Name string `json:"name"`
  12. }
  13. // HelloResponse 响应格式
  14. type HelloResponse struct {
  15. Reply string `json:"reply"`
  16. }
  17. // 这里创建构造函数 hello方法的业务处理
  18. // MakeServerEndPointHello 创建关于业务的构造函数
  19. // 传入 Server/server.go 定义的相关业务接口
  20. // 返回 go-kit/endpoint.Endpoint (实际上就是一个函数签名)
  21. func MakeServerEndPointHello(s server.IServer) endpoint.Endpoint {
  22. // 这里使用闭包,可以在这里做一些中间件业务的处理
  23. return func(ctx context.Context, request interface{}) (response interface{}, err error) {
  24. // request 是在对应请求来时传入的参数(这里的request 实际上是等下我们要将的Transport中一个decode函数中处理获得的参数)
  25. // 这里进行以下断言
  26. r, ok := request.(HelloRequest)
  27. if !ok {
  28. return HelloResponse{}, nil
  29. }
  30. // 这里实际上就是调用我们在Server/server.go中定义的业务逻辑
  31. // 我们拿到了 Request.Name 那么我们就可以调用我们的业务 Server.IServer 中的方法来处理这个数据并返回
  32. // 具体的业务逻辑具体定义....
  33. return HelloResponse{Reply: s.Hello(r.Name)}, nil
  34. // response 这里返回的response 可以返回任意的 不过根据规范是要返回我们刚才定义好的返回对象
  35. }
  36. }