Как использовать Swaggo (Swagger Doc) в GoLang Lang с http.ServeMux? - PullRequest
0 голосов
/ 21 марта 2019

В документации https://github.com/swaggo/swag использует gin для инициализации сервера, но в моем приложении я использую http.ServeMux и как инициализировать swaggo без использования gin server

в Документах используют

r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

как я могу использовать что-то вроде ...

mu.Handle("/swagger/*any", swaggerFiles.Handler)

......

следует моей первоначальной идее, но не работает ... rsrs

func Server() *http.ServeMux {
    docs.SwaggerInfo.Title = "Swagger Example API"
    docs.SwaggerInfo.Description = "This is a sample server Petstore server."
    docs.SwaggerInfo.Version = "1.0"
    docs.SwaggerInfo.Host = "petstore.swagger.io"

    mu := http.NewServeMux()
    mu.Handle("/metrics", promhttp.Handler())
    mu.Handle("/swagger/*any", swaggerFiles.Handler)
    mu.HandleFunc("/helloWorld", handlers.NewHelloWorldHandler().HelloWorldHandler)
    mu.HandleFunc("/production/", handlers.NewProductionHandler().ProductionHandler)
    return mu
}

1 Ответ

0 голосов
/ 21 марта 2019

Если у вас есть файлы чванства, созданные для распространения (например, статические файлы), и вы находитесь, скажем, в каталоге: /some/dir/path/static/swagger

Это должно работать с http-роутером go:

staticFilesPath := "/some/dir/path/static"
staticRoute := "/static/"

h := http.NewServeMux()

// static file handler for route '/static/*'
h.Handle(
    staticRoute,
    http.StripPrefix(
        staticRoute,
        http.FileServer(http.Dir(staticFilesPath)),
    ),
)

Я считаю полезным добавить это также:

// (redirect a route if not recognized - remove in production)
//
// unrecognized routes will redirect to Swagger API docs
h.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    http.Redirect(w, r, staticRoute + "swagger/", http.StatusSeeOther)
})
...