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