环境准备
- gokit工具集:
go get github.com/go-kit/kit
; - http请求路由组件:
go get github.com/gorilla/mux
; - gin框架安装:
go get -u github.com/gin-gonic/gin
;
go-kit集成gin
示例在 《go-kit启动http服务》代码示例上更改。
-
由于其灵活的设计, 通过使用 go-kit,开发者可以快速地构建出符合分布式系统要求的微服务应用,同时也能够方便地对已有的应用进行升级和维护。所以我们集成gin也是很方便的,只需要稍微改动transport层即可
/** * @date: 2023/2/18 * @desc: 传输层 http/rpc... */ package endpoints import ( "context" "encoding/json" "github.com/gin-gonic/gin" "github.com/go-kit/kit/endpoint" httptransport "github.com/go-kit/kit/transport/http" "kit-gin-demo/endpoints" "net/http" ) func decodeFooRequest(_ context.Context, r *http.Request) (interface{ }, error) { var req endpoints.FooRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { return nil, err } return req, nil } func decodeBarRequest(_ context.Context, r *http.Request) (interface{ }, error) { var req endpoints.BarRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { return nil, err } return req, nil } func encodeResponse(_ context.Context, w http.ResponseWriter, response interface{ }) error { return json.NewEncoder(w).Encode(response) } // MakeHttpHandler make http handler use mux func MakeHttpHandler(ctx context.Context, fooEndpoint, barEndpoint endpoint.Endpoint) http.Handler { //r := mux.NewRouter() r := gin.Default()