该项目包含Swagger 2.0的golang实现 (又名OpenAPI 2.0)。 它提供了与swagger规范一起工作的工具。
swagger 是RESTful API的简单而强大的实现。
github:https://github.com/go-swagger/go-swagger 
文档:https://goswagger.io/go-swagger/ 
聊聊Swagger 拥有全球最大的API工具生态系统,几乎所有现代编程语言和部署环境中都支持Swagger。
使用支持Swagger的API,您可以获得交互式文档、生成客户端SDK和发现服务。
Swagger帮助Apigee,Getty Images,Intuit,LivingSocial,McKesson,Microsoft,Morningstar和PayPal等公司使用RESTful api构建最佳服务。现在在2.0版本中,Swagger比以往任何时候都更加易用。它是完全开源的软件。
特点 go-swagger为go社区带来了一整套功能齐全、高性能的API组件,可与Swagger API配合使用: 开发服务端、客户端和数据模型。
按照swagger规范生成服务端代码 
按照swagger规范生成客户端代码 
按照swagger规范 (alpha阶段) 生成CLI (命令行工具) 
支持jsonschema和swagger提供的大多数功能,包括多态 
从带注释的go代码生成swagger规范 
使用swagger规范的其他工具 
出色的自定义功能,具有自带的扩展和可自定义的模板 
 
我们对代码生成的理念是:生成惯用的,快速的go代码,它与golint,go vet等兼容得很好。
安装 从源安装 按章支持命令,docker,源安装,这里只记录下我用源码安装的操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > go version go version go1.23.1 windows/amd64 > go install github.com/go-swagger/go-swagger/cmd/swagger@latest ... > swagger.exe version version: v0.31.0 > go env  GOPATH=C:\Users\hxd\go 
 
swagger工具说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Usage:   swagger [OPTIONS] <command > Swagger tries to support you as best as possible when building APIs. It aims to represent the contract of your API with a language agnostic description of your application in  json or yaml. Application Options:   -q, --quiet                  silence logs       --log-output=LOG-FILE    redirect logs to file Help Options:   -h, --help                    Show this help  message Available commands:   diff      diff swagger documents   expand     expand  $ref  fields in  a swagger spec   flatten   flattens a swagger document   generate  generate go code   init      initialize a spec document   mixin     merge swagger documents   serve     serve spec and docs   validate  validate the swagger document   version   print  the version 
 
具体怎么用可以参考官网。
生成服务端 参考:https://goswagger.io/go-swagger/generate/server/ 
1 2 3 4 5 6 7 8 9 swagger.exe init spec go mod init mlss-cc-service git init 
 
如图,我新建了一个项目,按照这个目录来构建应用
把swagger.exe放到项目里,编写好swagger.yaml  执行swagger生成代码
1 .\pkg\restapi\swagger\swagger.exe generate server -m ../models -f .\pkg\restapi\swagger\swagger.yaml -t .\pkg\restapi 
 
新建启动文件,启动:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 D:\goworkspace\mlss-cc-service> cd  .\cmd\mlss-cc-go\      PS D:\goworkspace\mlss-cc-service\cmd\mlss-cc-go> ls      目录: D:\goworkspace\mlss-cc-service\cmd\mlss-cc-go Mode                 LastWriteTime         Length Name ----                 -------------         ------ ---- -a----         2024/3/26     16:34           1356 main.go PS D:\goworkspace\mlss-cc-service\cmd\mlss-cc-go> go run .\main.go Serving open API swagger at http://127.0.0.1:56434 
 
已经开源到仓库https://gitee.com/deepter/mlss-cc-service 
https://gitee.com/deepter/mlss-cc-a 
服务端中间件 再生成的可修改文件中,例如 中,最后一个一个方法添加全局中间件:
1 2 3 4 5 6 7 8 9 10 11 func  setupGlobalMiddleware (handler http.Handler)   http.Handler {	locateHandler := mv.NewLocateMiddleWare(handler) 	loginHandler := mv.NewLoginMiddleWare(locateHandler) 	return  loginHandler } 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 func  NewLocateMiddleWare (handler http.Handler)   http.Handler {	return  http.HandlerFunc(func (w http.ResponseWriter, r *http.Request)   { 		acceptLang := r.Header.Get("Accept-Language" ) 		logger.Logger().Debugf("acceptLanguate: %v" , acceptLang) 		ctx := context.WithValue(r.Context(), "lang" , acceptLang) 		 		handler.ServeHTTP(w, r.WithContext(ctx)) 	}) } func  NewLoginMiddleWare (handler http.Handler)   http.Handler {	return  http.HandlerFunc(func (w http.ResponseWriter, r *http.Request)   { 		handler.ServeHTTP(w, r.WithContext(context.Background())) 	}) }