gin https://github.com/gin-gonic/gin
Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin.
startup a gin server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 engine := gin.New() engine.MaxMultipartMemory = 100 << 20 engine.Use(gin.Logger(), gin.Recovery()) engine.Use(other_middleware.Constructor()) engine.GET("/healthz" , func (ctx *gin.Context) { ctx.String(http.StatusOK, "SERVING" ) }) apiGroup := engine.Group("/api-name" ) apiGroup.Use(some_middleware.Constructor()) apiGroup.GET("/get" , funcGet) apiGroup.POST("/post" , funcPost) apiGroup.PUT("/put" , funcPut) gwServer := &http.Server{ Addr: "ip:port" , Handler: engine, } listener, err := net.listen("tcp" , gwServer.Addr) if err != nil { panic ("unable to listen on address" ) } if NoTls { if err := gwServer.Serve(listener); err != nil { if errors.Is(err, http.ErrServerClosed) { } else { panic ("server shutdown" ) } } } if Tls { if err := gwServer.ServeTLS(listener, CertPath, KeyPath); err != nil { if errors.Is(err, http.ErrServerClosed) { } else { panic ("server shutdown" ) } } }
serve swagger docs
1 2 3 4 5 6 7 8 engine.StaticFS("/docs/" , http.FS(swaggerDocEmbedFs)) engine.GET( "/swagger/*any" , ginSwagger.WrapHandler( swaggerFiles.Handler, ginSwagger.URL("/docs/path/to/swagger/doc.json" ) ), )
Grpc-Gateway