From a50883b7340d46c70dbaef360073bb56b9e2db56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 7 Feb 2025 18:33:07 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E4=BC=98=E5=8C=96server=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E7=9A=84=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router/register_test.go | 6 ++--- router/{group.go => server.go} | 41 +++++++++++++++++++++++++++++----- 2 files changed, 38 insertions(+), 9 deletions(-) rename router/{group.go => server.go} (59%) diff --git a/router/register_test.go b/router/register_test.go index 6bbedd8..2ec6bef 100644 --- a/router/register_test.go +++ b/router/register_test.go @@ -32,7 +32,7 @@ type Test struct { func Test_parseController(t *testing.T) { SetValidateErrTag("err_msg") - r := gin.Default() - Group(r, "test", nil, TestController{}) - r.Run(":8080") + s := NewServer(8080, nil) + s.Group("test", nil, TestController{}) + s.Start() } diff --git a/router/group.go b/router/server.go similarity index 59% rename from router/group.go rename to router/server.go index 1b39b67..1a3b3d3 100644 --- a/router/group.go +++ b/router/server.go @@ -4,23 +4,53 @@ // // Author : go_developer@163.com<白茶清欢> // -// Date : 2025-01-27 19:33 +// Date : 2025-02-07 18:19 package router import ( - "errors" + "fmt" "github.com/gin-gonic/gin" "net/http" "strings" ) +// NewServer server实例 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:20 2025/2/7 +func NewServer(port int, option any) *server { + if port < 80 { + panic("port should be greater than 80") + } + return &server{ + router: gin.Default(), + } +} + +type server struct { + router *gin.Engine + port int +} + +// Start 启动服务 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:31 2025/2/7 +func (s *server) Start() { + if err := s.router.Run(fmt.Sprintf(":%d", s.port)); err != nil { + panic("服务启动监听失败" + err.Error()) + } +} + // Group 注册接口路由 // // Author : go_developer@163.com<白茶清欢> // // Date : 19:35 2025/1/27 -func Group(router *gin.Engine, routerPrefix string, middlewareList []gin.HandlerFunc, cList ...any) error { - g := router.Group(routerPrefix) +func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cList ...any) { + g := s.router.Group(routerPrefix) g.Use(middlewareList...) cParser := controller{} for _, c := range cList { @@ -43,9 +73,8 @@ func Group(router *gin.Engine, routerPrefix string, middlewareList []gin.Handler case http.MethodOptions: g.OPTIONS(itemUriCfg.Path, RequestHandler(itemUriCfg)) case http.MethodTrace: - return errors.New(`method Trace is not supported`) + panic(`method Trace is not supported`) } } } - return nil } From 2f7d1438b28e05ecadd2a8376c61eca93e364c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 14 Feb 2025 21:16:19 +0800 Subject: [PATCH 02/10] update go mod --- go.mod | 6 +++--- go.sum | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 978c27b..3324483 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21.0 toolchain go1.23.1 require ( - git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250122075709-5ecf3edb4a00 + git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1 git.zhangdeman.cn/zhangdeman/exception v0.0.0-20250207091724-ca151fbc1f06 git.zhangdeman.cn/zhangdeman/logger v0.0.0-20241125083316-eab7bab9d7ad git.zhangdeman.cn/zhangdeman/network v0.0.0-20230925112156-f0eb86dd2442 @@ -59,8 +59,8 @@ require ( github.com/ugorji/go/codec v1.2.12 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/arch v0.14.0 // indirect - golang.org/x/crypto v0.32.0 // indirect - golang.org/x/net v0.34.0 // indirect + golang.org/x/crypto v0.33.0 // indirect + golang.org/x/net v0.35.0 // indirect golang.org/x/sys v0.30.0 // indirect golang.org/x/text v0.22.0 // indirect google.golang.org/protobuf v1.36.5 // indirect diff --git a/go.sum b/go.sum index 2c36799..f566b59 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250122075709-5ecf3edb4a00 h1:obyJF0CXVR93TOnOtzN5xXxxSLpw1UFMBc4niWiyoQI= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250122075709-5ecf3edb4a00/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1 h1:vv4X72I6s6XcTi0ykj2v/cgMZyseFyE2LkS4WloICCs= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda h1:bMD6r9gjRy7cO+T4zRQVYAesgIblBdTnhzT1vN5wjvI= git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda/go.mod h1:dT0rmHcJ9Z9IqWeMIt7YzR88nKkNV2V3dfG0j9Q6lK0= git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4 h1:s6d4b6yY+NaK1AzoBD1pxqsuygEHQz0Oie86c45geDw= @@ -172,8 +174,12 @@ golang.org/x/arch v0.14.0 h1:z9JUEZWr8x4rR0OU6c4/4t6E6jOZ8/QBS2bBYBm4tx4= golang.org/x/arch v0.14.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= From e1f597ae5043ce012ffbf29396cb70de0f22884d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 14 Feb 2025 22:30:56 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E5=BC=95=E5=85=A5=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 6 +++--- go.sum | 46 ++++------------------------------------- router/controller.go | 24 ++++----------------- router/define.go | 2 +- router/doc.go | 43 ++++++++++++++++++++++++++++++++++++++ router/register_test.go | 18 ++++++++++++++-- router/server.go | 12 +++++++---- 7 files changed, 79 insertions(+), 72 deletions(-) create mode 100644 router/doc.go diff --git a/go.mod b/go.mod index 3324483..6acc58a 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ module git.zhangdeman.cn/zhangdeman/gin -go 1.21.0 +go 1.22.2 -toolchain go1.23.1 +toolchain go1.23.6 require ( git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1 @@ -19,6 +19,7 @@ require ( ) require ( + git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214135728-9e8560cccf5b // indirect git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda // indirect git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4 // indirect git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0 // indirect @@ -29,7 +30,6 @@ require ( github.com/bytedance/sonic v1.12.8 // indirect github.com/bytedance/sonic/loader v0.2.3 // indirect github.com/cloudwego/base64x v0.1.5 // indirect - github.com/cloudwego/iasm v0.2.0 // indirect github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 // indirect github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/gin-contrib/sse v1.0.0 // indirect diff --git a/go.sum b/go.sum index f566b59..fe01302 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,13 @@ -git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250122075709-5ecf3edb4a00 h1:obyJF0CXVR93TOnOtzN5xXxxSLpw1UFMBc4niWiyoQI= -git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250122075709-5ecf3edb4a00/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214133346-07f91dfdfc0e h1:Pveo21W7P5QoEtJMRqaPWbTtiH1iCHnXlFOzI9qU9D0= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214133346-07f91dfdfc0e/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214135728-9e8560cccf5b h1:Ax0XFSgcnVkaaHBgCj4ZTUw44Non2d0xAZuXoZW2qS8= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214135728-9e8560cccf5b/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1 h1:vv4X72I6s6XcTi0ykj2v/cgMZyseFyE2LkS4WloICCs= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda h1:bMD6r9gjRy7cO+T4zRQVYAesgIblBdTnhzT1vN5wjvI= git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda/go.mod h1:dT0rmHcJ9Z9IqWeMIt7YzR88nKkNV2V3dfG0j9Q6lK0= git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4 h1:s6d4b6yY+NaK1AzoBD1pxqsuygEHQz0Oie86c45geDw= git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4/go.mod h1:V4Dfg1v/JVIZGEKCm6/aehs8hK+Xow1dkL1yiQymXlQ= -git.zhangdeman.cn/zhangdeman/exception v0.0.0-20240930081343-1e7f84ed8465 h1:j5EB0hamTMT5fY+xmjJ51oBvll+vS2inNPi+3/UBj60= -git.zhangdeman.cn/zhangdeman/exception v0.0.0-20240930081343-1e7f84ed8465/go.mod h1:Voc8J4ordx7nuMWpgACXXZULQy7ZIuBzcEIoS8VnDIw= -git.zhangdeman.cn/zhangdeman/exception v0.0.0-20250207091353-907c20662792 h1:BehqU7W+FF39xCcrbrlPBggbKVTIguDDXfABn8l5RB4= -git.zhangdeman.cn/zhangdeman/exception v0.0.0-20250207091353-907c20662792/go.mod h1:Voc8J4ordx7nuMWpgACXXZULQy7ZIuBzcEIoS8VnDIw= git.zhangdeman.cn/zhangdeman/exception v0.0.0-20250207091724-ca151fbc1f06 h1:XsjGMkBCi93h56oCg5Lrz5zVpUxify/CQVhQU9+qLWM= git.zhangdeman.cn/zhangdeman/exception v0.0.0-20250207091724-ca151fbc1f06/go.mod h1:Voc8J4ordx7nuMWpgACXXZULQy7ZIuBzcEIoS8VnDIw= git.zhangdeman.cn/zhangdeman/logger v0.0.0-20241125083316-eab7bab9d7ad h1:6BI3QiDI64SlER1006UJbTJyOCXxB8KCmCK+Kr7FzQo= @@ -22,8 +20,6 @@ git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241223084948-de2e49144fcd h1:q7G git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241223084948-de2e49144fcd/go.mod h1:+D6uPSljwHywjVY5WSBY4TRVMj26TN5f5cFGEYMldjs= git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e h1:Q973S6CcWr1ICZhFI1STFOJ+KUImCl2BaIXm6YppBqI= git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e/go.mod h1:VpPjBlwz8U+OxZuxzHQBv1aEEZ3pStH6bZvT21ADEbI= -git.zhangdeman.cn/zhangdeman/websocket v0.0.0-20240723075210-85feada512b2 h1:P2kuhU2TFWk9mPbJlZCK6FMDVS7S3NGafWKD4eNqKiI= -git.zhangdeman.cn/zhangdeman/websocket v0.0.0-20240723075210-85feada512b2/go.mod h1:7KaMpQmWgiNLpEkaV7oDtep7geI1f/VoCoPVcyvMjAE= git.zhangdeman.cn/zhangdeman/websocket v0.0.0-20241125101541-c5ea194c9c1e h1:YE2Gi+M03UDImIpWa3I7jzSesyfu2RL8x/4ONs5v0oE= git.zhangdeman.cn/zhangdeman/websocket v0.0.0-20241125101541-c5ea194c9c1e/go.mod h1:L/7JugxKZL3JP9JP/XDvPAPz0FQXG1u181Su1+u/d1c= git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250124091620-c757e551a8c9 h1:yF770WIDNwyiKL0nwmBGmjZvNCLXtHQL4xJyffPjTMU= @@ -32,33 +28,21 @@ github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0 github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ= github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg= -github.com/bytedance/sonic v1.12.5 h1:hoZxY8uW+mT+OpkcUWw4k0fDINtOcVavEsGfzwzFU/w= -github.com/bytedance/sonic v1.12.5/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= -github.com/bytedance/sonic v1.12.7 h1:CQU8pxOy9HToxhndH0Kx/S1qU/CuS9GnKYrGioDcU1Q= -github.com/bytedance/sonic v1.12.7/go.mod h1:tnbal4mxOMju17EGfknm2XyYcpyCnIROYOEYuemj13I= github.com/bytedance/sonic v1.12.8 h1:4xYRVRlXIgvSZ4e8iVTlMF5szgpXd4AfvuWgA8I8lgs= github.com/bytedance/sonic v1.12.8/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= -github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= -github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/bytedance/sonic/loader v0.2.3 h1:yctD0Q3v2NOGfSWPLPvG2ggA2kV6TS6s4wioyEqssH0= github.com/bytedance/sonic/loader v0.2.3/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= -github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= -github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= -github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 h1:CaO/zOnF8VvUfEbhRatPcwKVWamvbYd8tQGRWacE9kU= github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1/go.mod h1:+hnT3ywWDTAFrW5aE+u2Sa/wT555ZqwoCS+pk3p6ry4= github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E= github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0= github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= @@ -73,10 +57,6 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.24.0 h1:KHQckvo8G6hlWnrPX4NJJ+aBfWNAE/HH+qdL2cBpCmg= github.com/go-playground/validator/v10 v10.24.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= -github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= -github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= -github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= @@ -145,8 +125,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= @@ -166,35 +144,19 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= -golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/arch v0.13.0 h1:KCkqVVV1kGg0X87TFysjCJ8MxtZEIU4Ja/yXGeoECdA= -golang.org/x/arch v0.13.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/arch v0.14.0 h1:z9JUEZWr8x4rR0OU6c4/4t6E6jOZ8/QBS2bBYBm4tx4= golang.org/x/arch v0.14.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= -golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= -golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= -golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= -google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/router/controller.go b/router/controller.go index 8c6f5da..d27f666 100644 --- a/router/controller.go +++ b/router/controller.go @@ -9,7 +9,6 @@ package router import ( "reflect" - "strings" ) // controller 解析controller有哪些方法要注册为接口 @@ -92,12 +91,14 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n formType = methodType.In(2).Elem() } cfg.FormDataType = formType - metaField, metaFieldExist := formType.FieldByName(FieldNameMeta) + _, metaFieldExist := formType.FieldByName(FieldNameMeta) if !metaFieldExist { needRegister = false return } - + cfg.ResultDataType = methodType.Out(0) + if cfg.ResultDataType == nil { + } if methodType.Out(1).Kind().String() != ErrorType { // 判断是否是实现 error接口的方法 outputErrParse := false @@ -115,23 +116,6 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n return } } - // 解析meta信息 - cfg.Path = metaField.Tag.Get(TagNamePath) - cfg.RequestMethod = metaField.Tag.Get(TagNameMethod) - cfg.Desc = metaField.Tag.Get(TagNameDesc) - cfg.TagList = strings.Split(metaField.Tag.Get(TagNameUriTag), ",") - // 解析第一个返回值, 要求必须是结构体或者是map - outputStrictModel := metaField.Tag.Get(TagNameOutputStrict) - cfg.OutputStrict = outputStrictModel == "1" || outputStrictModel == "true" - if cfg.OutputStrict { - // 开启输出严格模式校验 - if methodType.Out(0).Kind() != reflect.Struct && methodType.Out(0).Kind() != reflect.Map { - panic(cfg.Path + " : 接口配置输出严格校验, 输出数据类型必须为 struct 或 *struct 或 map, 实际返回数据类型 : " + methodType.Out(0).Kind().String()) - return - } - } - // 解析参数配置 - cfg.ParamList = c.parseParamConfig(formType) cfg.ApiLogicFunc = reflectMethod needRegister = true return diff --git a/router/define.go b/router/define.go index 4632d9d..605f26e 100644 --- a/router/define.go +++ b/router/define.go @@ -39,8 +39,8 @@ type UriConfig struct { TagList []string `json:"tag_list"` // 接口分组 Desc string `json:"desc"` // 接口描述 OutputStrict bool `json:"output_strict"` // 接口是否为严格模式 : 不配置,可返回任意类型, 配置, 必须返回结构体或者map - ParamList []UriParam `json:"param_list"` // 参数信息表 FormDataType reflect.Type `json:"-"` // 表单数据类型 + ResultDataType reflect.Type `json:"-"` // 返回值数据类型 ApiStructValue reflect.Value `json:"-"` // 逻辑函数所属结构体取值 ApiLogicFunc reflect.Method `json:"-"` // 自定义的接口逻辑 } diff --git a/router/doc.go b/router/doc.go new file mode 100644 index 0000000..aa09f42 --- /dev/null +++ b/router/doc.go @@ -0,0 +1,43 @@ +// Package router ... +// +// Description : router ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-02-14 21:48 +package router + +import ( + "reflect" + + api_doc "git.zhangdeman.cn/gateway/api-doc" + "git.zhangdeman.cn/gateway/api-doc/define" +) + +func NewDoc(info *define.Info, servers []*define.ServerItem) *Doc { + return &Doc{ + instance: api_doc.NewOpenapiDoc(info, servers), + } +} + +type Doc struct { + instance *api_doc.Generate +} + +// Add 增加接口文档测试 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:55 2025/2/14 +func (d *Doc) Add(routePrefix string, paramType reflect.Type, resultType reflect.Type) { + _ = d.instance.AddApiFromInAndOut(routePrefix, paramType, resultType) +} + +// Data 文档数据 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:59 2025/2/14 +func (d *Doc) Data() *define.OpenapiDoc { + return d.instance.Doc() +} diff --git a/router/register_test.go b/router/register_test.go index 2ec6bef..82947c3 100644 --- a/router/register_test.go +++ b/router/register_test.go @@ -8,6 +8,8 @@ package router import ( + "encoding/json" + "fmt" "testing" "github.com/gin-gonic/gin" @@ -15,8 +17,18 @@ import ( type TestController struct{} -func (t TestController) Logic(ctx *gin.Context, formData *TestForm) (any, error) { - return formData, nil +func (t TestController) Logic(ctx *gin.Context, formData *TestForm) (TestOut, error) { + return TestOut{ + FormData: formData, + }, nil +} + +type TestOut struct { + Age int `json:"age" form:"age" binding:"min=20" err_msg:"年龄不能小于20"` + Name string `json:"name" form:"name"` + Test *Test `json:"test" form:"test"` + Num *int64 `json:"num" form:"num"` + FormData *TestForm `json:"form_data" form:"form_data"` } type TestForm struct { @@ -34,5 +46,7 @@ func Test_parseController(t *testing.T) { SetValidateErrTag("err_msg") s := NewServer(8080, nil) s.Group("test", nil, TestController{}) + byteData, _ := json.Marshal(s.docInstance.Data()) + fmt.Println(string(byteData)) s.Start() } diff --git a/router/server.go b/router/server.go index 1a3b3d3..1aa0726 100644 --- a/router/server.go +++ b/router/server.go @@ -9,9 +9,10 @@ package router import ( "fmt" - "github.com/gin-gonic/gin" "net/http" "strings" + + "github.com/gin-gonic/gin" ) // NewServer server实例 @@ -24,13 +25,15 @@ func NewServer(port int, option any) *server { panic("port should be greater than 80") } return &server{ - router: gin.Default(), + router: gin.Default(), + docInstance: NewDoc(nil, nil), // TODO : 配置相关信息 } } type server struct { - router *gin.Engine - port int + router *gin.Engine + port int + docInstance *Doc } // Start 启动服务 @@ -56,6 +59,7 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL for _, c := range cList { urlTable := cParser.Parse(c) for _, itemUriCfg := range urlTable { + s.docInstance.Add(routerPrefix, itemUriCfg.FormDataType, itemUriCfg.ResultDataType) method := strings.ToUpper(itemUriCfg.RequestMethod) switch method { case http.MethodGet: From ff91efd1c870cc20bffcd59d3c06741aa5397757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sat, 15 Feb 2025 21:19:35 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=B8=80=E7=89=88?= =?UTF-8?q?=E6=96=87=E6=A1=A3json=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 +- go.sum | 10 ++++++++++ router/server.go | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 6acc58a..beb3299 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( ) require ( - git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214135728-9e8560cccf5b // indirect + git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215124612-0047befc07ba // indirect git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda // indirect git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4 // indirect git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0 // indirect diff --git a/go.sum b/go.sum index fe01302..b83e93f 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,16 @@ git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214133346-07f91dfdfc0e h1:Pveo21W7 git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214133346-07f91dfdfc0e/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214135728-9e8560cccf5b h1:Ax0XFSgcnVkaaHBgCj4ZTUw44Non2d0xAZuXoZW2qS8= git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214135728-9e8560cccf5b/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215051336-d70cfe3e50f9 h1:XkrwmWvUg/WYbFr9wf139yP0qCHPZaQTBWICXrPsbYw= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215051336-d70cfe3e50f9/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215075104-ec0d894d361c h1:HmxeHHFp88qHBrof0WQPulOZ0NRu2q6rT1OD2DeoE+g= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215075104-ec0d894d361c/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215080050-dd04ad543a2e h1:oYERjN65rvOG/DLZsPFF4BcvpALxQuHIbMkms9h/EHM= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215080050-dd04ad543a2e/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215120152-8387ae08e972 h1:h725bMAkjHVAh4iv2zYzbFq/VEdy712ruFB+AUlJ5xM= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215120152-8387ae08e972/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215124612-0047befc07ba h1:OeuXovN9tjefSGKCC41nDvs2MFdnGG3/wzqLNbTOuo4= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215124612-0047befc07ba/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1 h1:vv4X72I6s6XcTi0ykj2v/cgMZyseFyE2LkS4WloICCs= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda h1:bMD6r9gjRy7cO+T4zRQVYAesgIblBdTnhzT1vN5wjvI= diff --git a/router/server.go b/router/server.go index 1aa0726..77b9b2a 100644 --- a/router/server.go +++ b/router/server.go @@ -27,6 +27,7 @@ func NewServer(port int, option any) *server { return &server{ router: gin.Default(), docInstance: NewDoc(nil, nil), // TODO : 配置相关信息 + port: port, } } From 99df73e50e2943b6343b00b249a02c51ca4cd323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sat, 15 Feb 2025 21:53:21 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E6=95=B4=E5=90=88=E9=BB=98=E8=AE=A4swagg?= =?UTF-8?q?er=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 14 +++++++- go.sum | 81 +++++++++++++++++++++++++++++++++++--------- router/define.go | 5 +++ router/server.go | 18 ++++++++++ router/swagger_ui.go | 71 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 172 insertions(+), 17 deletions(-) create mode 100644 router/swagger_ui.go diff --git a/go.mod b/go.mod index beb3299..18e2d57 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.22.2 toolchain go1.23.6 require ( + git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215124612-0047befc07ba git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1 git.zhangdeman.cn/zhangdeman/exception v0.0.0-20250207091724-ca151fbc1f06 git.zhangdeman.cn/zhangdeman/logger v0.0.0-20241125083316-eab7bab9d7ad @@ -13,19 +14,22 @@ require ( git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250124091620-c757e551a8c9 github.com/gin-gonic/gin v1.10.0 github.com/go-playground/validator/v10 v10.24.0 + github.com/go-webtools/knife4go v1.0.4 github.com/mcuadros/go-defaults v1.2.0 github.com/sbabiv/xml2map v1.2.1 + github.com/swaggo/files v1.0.1 + github.com/swaggo/gin-swagger v1.6.0 go.uber.org/zap v1.27.0 ) require ( - git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215124612-0047befc07ba // indirect git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda // indirect git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4 // indirect git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0 // indirect git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e // indirect git.zhangdeman.cn/zhangdeman/websocket v0.0.0-20241125101541-c5ea194c9c1e // indirect github.com/BurntSushi/toml v1.4.0 // indirect + github.com/KyleBanks/depth v1.2.1 // indirect github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect github.com/bytedance/sonic v1.12.8 // indirect github.com/bytedance/sonic/loader v0.2.3 // indirect @@ -34,15 +38,21 @@ require ( github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/gin-contrib/sse v1.0.0 // indirect github.com/go-ini/ini v1.67.0 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/spec v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/goccy/go-json v0.10.5 // indirect github.com/gorilla/websocket v1.5.3 // indirect + github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect github.com/lestrrat-go/strftime v1.1.0 // indirect + github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -52,6 +62,7 @@ require ( github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/swaggo/swag v1.16.4 // indirect github.com/tidwall/gjson v1.18.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect @@ -63,6 +74,7 @@ require ( golang.org/x/net v0.35.0 // indirect golang.org/x/sys v0.30.0 // indirect golang.org/x/text v0.22.0 // indirect + golang.org/x/tools v0.30.0 // indirect google.golang.org/protobuf v1.36.5 // indirect gopkg.in/olahol/melody.v1 v1.0.0-20170518105555-d52139073376 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index b83e93f..570f383 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,3 @@ -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214133346-07f91dfdfc0e h1:Pveo21W7P5QoEtJMRqaPWbTtiH1iCHnXlFOzI9qU9D0= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214133346-07f91dfdfc0e/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214135728-9e8560cccf5b h1:Ax0XFSgcnVkaaHBgCj4ZTUw44Non2d0xAZuXoZW2qS8= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250214135728-9e8560cccf5b/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215051336-d70cfe3e50f9 h1:XkrwmWvUg/WYbFr9wf139yP0qCHPZaQTBWICXrPsbYw= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215051336-d70cfe3e50f9/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215075104-ec0d894d361c h1:HmxeHHFp88qHBrof0WQPulOZ0NRu2q6rT1OD2DeoE+g= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215075104-ec0d894d361c/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215080050-dd04ad543a2e h1:oYERjN65rvOG/DLZsPFF4BcvpALxQuHIbMkms9h/EHM= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215080050-dd04ad543a2e/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215120152-8387ae08e972 h1:h725bMAkjHVAh4iv2zYzbFq/VEdy712ruFB+AUlJ5xM= -git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215120152-8387ae08e972/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215124612-0047befc07ba h1:OeuXovN9tjefSGKCC41nDvs2MFdnGG3/wzqLNbTOuo4= git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215124612-0047befc07ba/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1 h1:vv4X72I6s6XcTi0ykj2v/cgMZyseFyE2LkS4WloICCs= @@ -36,6 +24,8 @@ git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250124091620-c757e551a8c9 h1:yF770 git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250124091620-c757e551a8c9/go.mod h1:I76wxEsWq7KnMQ84elpwTjEqq4I49QFw60tp5h7iGBs= github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ= github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg= github.com/bytedance/sonic v1.12.8 h1:4xYRVRlXIgvSZ4e8iVTlMF5szgpXd4AfvuWgA8I8lgs= @@ -53,12 +43,22 @@ github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 h1:CaO/zOnF8VvUfEbhRatPcwKVWamvbY github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1/go.mod h1:+hnT3ywWDTAFrW5aE+u2Sa/wT555ZqwoCS+pk3p6ry4= github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= +github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= +github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E= github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0= github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= +github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -67,10 +67,12 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.24.0 h1:KHQckvo8G6hlWnrPX4NJJ+aBfWNAE/HH+qdL2cBpCmg= github.com/go-playground/validator/v10 v10.24.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= +github.com/go-webtools/knife4go v1.0.4 h1:p32SApmM0sx2/Y5p0QfeaGv5KD96R1mj2CaHdyH8jy8= +github.com/go-webtools/knife4go v1.0.4/go.mod h1:trOlXN1tqBJ7R44sHON3exGvzCwjbsVriIHEenry3d8= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -78,12 +80,16 @@ github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aN github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg= github.com/jonboulle/clockwork v0.3.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -96,6 +102,8 @@ github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkL github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= github.com/lestrrat-go/strftime v1.1.0 h1:gMESpZy44/4pXLO/m+sL0yBd1W6LjgjrrD4a68Gapyg= github.com/lestrrat-go/strftime v1.1.0/go.mod h1:uzeIB52CeUJenCo1syghlugshMysrqUT51HlxphXVeI= +github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= +github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mcuadros/go-defaults v1.2.0 h1:FODb8WSf0uGaY8elWJAkoLL0Ri6AlZ1bFlenk56oZtc= @@ -113,7 +121,6 @@ github.com/mozillazg/go-pinyin v0.20.0 h1:BtR3DsxpApHfKReaPO1fCqF4pThRwH9uwvXzm+ github.com/mozillazg/go-pinyin v0.20.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc= github.com/mssola/user_agent v0.6.0 h1:uwPR4rtWlCHRFyyP9u2KOV0u8iQXmS7Z7feTrstQwk4= github.com/mssola/user_agent v0.6.0/go.mod h1:TTPno8LPY3wAIEKRpAtkdMT0f8SE24pLRGPahjCH4uw= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= @@ -121,6 +128,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/sbabiv/xml2map v1.2.1 h1:1lT7t0hhUvXZCkdxqtq4n8/ZCnwLWGq4rDuDv5XOoFE= github.com/sbabiv/xml2map v1.2.1/go.mod h1:2TPoAfcaM7+Sd4iriPvzyntb2mx7GY+kkQpB/GQa/eo= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= @@ -137,6 +146,12 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= +github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= +github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= +github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= +github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= +github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= @@ -148,6 +163,7 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -156,22 +172,55 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/arch v0.14.0 h1:z9JUEZWr8x4rR0OU6c4/4t6E6jOZ8/QBS2bBYBm4tx4= golang.org/x/arch v0.14.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/olahol/melody.v1 v1.0.0-20170518105555-d52139073376 h1:sY2a+y0j4iDrajJcorb+a0hJIQ6uakU5gybjfLWHlXo= gopkg.in/olahol/melody.v1 v1.0.0-20170518105555-d52139073376/go.mod h1:BHKOc1m5wm8WwQkMqYBoo4vNxhmF7xg8+xhG8L+Cy3M= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/router/define.go b/router/define.go index 605f26e..9f8cfff 100644 --- a/router/define.go +++ b/router/define.go @@ -63,3 +63,8 @@ type UriParam struct { const ( FieldNameMeta = "Meta" // 元信息字段 ) + +const ( + SwaggerUIThemeDefault = "swaggerUI" // 文档默认主题 + SwaggerUIThemeKnife4go = "knife4go" // knife4go 主题 +) diff --git a/router/server.go b/router/server.go index 77b9b2a..cb44bf6 100644 --- a/router/server.go +++ b/router/server.go @@ -82,4 +82,22 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL } } } + // 注册文档 + s.SwaggerUI() +} + +// SwaggerUI ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:45 2025/2/15 +func (s *server) SwaggerUI() { + swaggerInstance := NewSwaggerUI(s.docInstance, SwaggerUIThemeDefault) + // 默认swagger + s.router.GET("/swagger/*any", func(ctx *gin.Context) { + if ctx.Request.RequestURI == "/swagger/doc.json" { + ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) + ctx.Abort() + } + }, swaggerInstance.HandleSwaggerUI()) } diff --git a/router/swagger_ui.go b/router/swagger_ui.go new file mode 100644 index 0000000..ca0ed30 --- /dev/null +++ b/router/swagger_ui.go @@ -0,0 +1,71 @@ +// Package router ... +// +// Description : router ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-02-15 21:20 +package router + +import ( + "github.com/gin-gonic/gin" + knife4goFiles "github.com/go-webtools/knife4go" + knife4goGin "github.com/go-webtools/knife4go/gin" + swaggerFiles "github.com/swaggo/files" + ginSwagger "github.com/swaggo/gin-swagger" +) + +// NewSwaggerUI ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:21 2025/2/15 +func NewSwaggerUI(docInstance *Doc, uiTheme string) *SwaggerUI { + return &SwaggerUI{ + docInstance: docInstance, + uiTheme: uiTheme, + } +} + +type SwaggerUI struct { + docInstance *Doc // 文档实例 + uiTheme string // 文档主题, swaggerUI / knife4go, 默认 knife4go +} + +// Handler 访问文档的接口处理 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:34 2025/2/15 +func (su *SwaggerUI) Handler() func(ctx *gin.Context) { + switch su.uiTheme { + case SwaggerUIThemeKnife4go: + return su.HandleKnife4goUI() + default: + return su.HandleSwaggerUI() + } +} + +// HandleKnife4goUI ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:38 2025/2/15 +func (su *SwaggerUI) HandleKnife4goUI() func(ctx *gin.Context) { + resetOption := func(cfg *knife4goGin.Config) { + if nil == cfg { + return + } + cfg.Title = "服务接口文档" + } + return knife4goGin.WrapHandler(knife4goFiles.Handler, resetOption) +} + +// HandleSwaggerUI ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:41 2025/2/15 +func (su *SwaggerUI) HandleSwaggerUI() func(ctx *gin.Context) { + return ginSwagger.WrapHandler(swaggerFiles.Handler) +} From c3df76e94ddf8ae37d3809d73b623e356d1d70d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sat, 15 Feb 2025 22:34:21 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8DURL=E6=B3=A8=E5=86=8CBU?= =?UTF-8?q?G?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router/controller.go | 20 +++++++++++++++++++- router/doc.go | 6 +++--- router/register_test.go | 4 ---- router/server.go | 35 ++++++++++++++++++++++++++++------- 4 files changed, 50 insertions(+), 15 deletions(-) diff --git a/router/controller.go b/router/controller.go index d27f666..3804b1f 100644 --- a/router/controller.go +++ b/router/controller.go @@ -9,6 +9,7 @@ package router import ( "reflect" + "strings" ) // controller 解析controller有哪些方法要注册为接口 @@ -91,7 +92,7 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n formType = methodType.In(2).Elem() } cfg.FormDataType = formType - _, metaFieldExist := formType.FieldByName(FieldNameMeta) + metaField, metaFieldExist := formType.FieldByName(FieldNameMeta) if !metaFieldExist { needRegister = false return @@ -116,6 +117,23 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n return } } + // 解析meta信息 + cfg.Path = metaField.Tag.Get(TagNamePath) + cfg.RequestMethod = metaField.Tag.Get(TagNameMethod) + cfg.Desc = metaField.Tag.Get(TagNameDesc) + cfg.TagList = strings.Split(metaField.Tag.Get(TagNameUriTag), ",") + // 解析第一个返回值, 要求必须是结构体或者是map + outputStrictModel := metaField.Tag.Get(TagNameOutputStrict) + cfg.OutputStrict = outputStrictModel == "1" || outputStrictModel == "true" + if cfg.OutputStrict { + // 开启输出严格模式校验 + if methodType.Out(0).Kind() != reflect.Struct && methodType.Out(0).Kind() != reflect.Map { + panic(cfg.Path + " : 接口配置输出严格校验, 输出数据类型必须为 struct 或 *struct 或 map, 实际返回数据类型 : " + methodType.Out(0).Kind().String()) + return + } + } + // 解析参数配置 + //cfg.ParamList = c.parseParamConfig(formType) cfg.ApiLogicFunc = reflectMethod needRegister = true return diff --git a/router/doc.go b/router/doc.go index aa09f42..78ddef0 100644 --- a/router/doc.go +++ b/router/doc.go @@ -10,18 +10,18 @@ package router import ( "reflect" - api_doc "git.zhangdeman.cn/gateway/api-doc" + apiDoc "git.zhangdeman.cn/gateway/api-doc" "git.zhangdeman.cn/gateway/api-doc/define" ) func NewDoc(info *define.Info, servers []*define.ServerItem) *Doc { return &Doc{ - instance: api_doc.NewOpenapiDoc(info, servers), + instance: apiDoc.NewOpenapiDoc(info, servers), } } type Doc struct { - instance *api_doc.Generate + instance *apiDoc.Generate } // Add 增加接口文档测试 diff --git a/router/register_test.go b/router/register_test.go index 82947c3..b29bd34 100644 --- a/router/register_test.go +++ b/router/register_test.go @@ -8,8 +8,6 @@ package router import ( - "encoding/json" - "fmt" "testing" "github.com/gin-gonic/gin" @@ -46,7 +44,5 @@ func Test_parseController(t *testing.T) { SetValidateErrTag("err_msg") s := NewServer(8080, nil) s.Group("test", nil, TestController{}) - byteData, _ := json.Marshal(s.docInstance.Data()) - fmt.Println(string(byteData)) s.Start() } diff --git a/router/server.go b/router/server.go index cb44bf6..99963ad 100644 --- a/router/server.go +++ b/router/server.go @@ -12,6 +12,9 @@ import ( "net/http" "strings" + "git.zhangdeman.cn/zhangdeman/consts" + + apiDocDefine "git.zhangdeman.cn/gateway/api-doc/define" "github.com/gin-gonic/gin" ) @@ -25,9 +28,14 @@ func NewServer(port int, option any) *server { panic("port should be greater than 80") } return &server{ - router: gin.Default(), - docInstance: NewDoc(nil, nil), // TODO : 配置相关信息 - port: port, + router: gin.Default(), + docInstance: NewDoc(nil, []*apiDocDefine.ServerItem{ + { + Url: fmt.Sprintf("http://127.0.0.1:%d", port), + Description: "测试服务器", + }, + }), // TODO : 配置相关信息 + port: port, } } @@ -79,6 +87,8 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL g.OPTIONS(itemUriCfg.Path, RequestHandler(itemUriCfg)) case http.MethodTrace: panic(`method Trace is not supported`) + default: + panic("method " + itemUriCfg.RequestMethod + " is not support") } } } @@ -93,11 +103,22 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL // Date : 21:45 2025/2/15 func (s *server) SwaggerUI() { swaggerInstance := NewSwaggerUI(s.docInstance, SwaggerUIThemeDefault) - // 默认swagger - s.router.GET("/swagger/*any", func(ctx *gin.Context) { - if ctx.Request.RequestURI == "/swagger/doc.json" { + s.router.GET("/doc/swagger/*any", func(ctx *gin.Context) { + if ctx.Request.RequestURI == "/doc/swagger/doc.json" { + // 默认swagger, 通过此接口读取文档数据 ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) ctx.Abort() } - }, swaggerInstance.HandleSwaggerUI()) + if ctx.Request.RequestURI == "/doc/swagger/openapi.json" { + // knife4go 文档通过此接口读取文档列表 + ctx.JSON(http.StatusOK, []map[string]any{ + { + "name": "服务文档", + "url": "doc.json", + "swaggerVersion": consts.SwaggerDocVersion3, + }, + }) + ctx.Abort() + } + }, swaggerInstance.Handler()) } From d832eef5a04b6fc4e02980ca813ff93d8cb46dc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sun, 16 Feb 2025 13:06:58 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E8=B0=83=E8=AF=95=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E9=9B=86=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 4 ++++ router/define.go | 5 +++-- router/register_test.go | 4 ++-- router/server.go | 17 ++++++++++++++++- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 18e2d57..b04fab5 100644 --- a/go.mod +++ b/go.mod @@ -79,3 +79,7 @@ require ( gopkg.in/olahol/melody.v1 v1.0.0-20170518105555-d52139073376 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace ( + git.zhangdeman.cn/gateway/api-doc => ../api-doc +) \ No newline at end of file diff --git a/router/define.go b/router/define.go index 9f8cfff..4f00000 100644 --- a/router/define.go +++ b/router/define.go @@ -65,6 +65,7 @@ const ( ) const ( - SwaggerUIThemeDefault = "swaggerUI" // 文档默认主题 - SwaggerUIThemeKnife4go = "knife4go" // knife4go 主题 + SwaggerUIThemeDefault = "swaggerUI" // 文档默认主题 + SwaggerUIThemeKnife4go = "knife4go" // knife4go 主题 + SwaggerUIThemeYDocLucky = "YDocLuckyUI" // YDoc Lucky UI 主题: https://github.com/NoBugBoy/LuckyUI ) diff --git a/router/register_test.go b/router/register_test.go index b29bd34..ca43da2 100644 --- a/router/register_test.go +++ b/router/register_test.go @@ -30,7 +30,7 @@ type TestOut struct { } type TestForm struct { - Meta `tag:"测试表单" path:"/a/b/c/d" desc:"测试接口" method:"get"` + Meta `tag:"测试表单" path:"/a/b/c/d" desc:"测试接口" method:"GET"` Age int `json:"age" form:"age" binding:"min=20" err_msg:"年龄不能小于20"` Name string `json:"name" form:"name"` Test *Test `json:"test" form:"test"` @@ -42,7 +42,7 @@ type Test struct { func Test_parseController(t *testing.T) { SetValidateErrTag("err_msg") - s := NewServer(8080, nil) + s := NewServer(8888, nil) s.Group("test", nil, TestController{}) s.Start() } diff --git a/router/server.go b/router/server.go index 99963ad..a5e967a 100644 --- a/router/server.go +++ b/router/server.go @@ -102,7 +102,22 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL // // Date : 21:45 2025/2/15 func (s *server) SwaggerUI() { - swaggerInstance := NewSwaggerUI(s.docInstance, SwaggerUIThemeDefault) + swaggerInstance := NewSwaggerUI(s.docInstance, SwaggerUIThemeKnife4go) + s.router.GET("/swagger-resources", func(ctx *gin.Context) { // lucky UI获取分组信息 + ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*") // 允许访问所有域 + ctx.JSON(http.StatusOK, []map[string]any{ + { + "name": "服务文档", + "url": "/swagger-ui/doc/openapi.json", + "swaggerVersion": consts.SwaggerDocVersion3, + }, + }) + // ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) + }) + s.router.GET("/swagger-ui/doc/openapi.json", func(ctx *gin.Context) { + ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*") // 允许访问所有域 + ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) + }) s.router.GET("/doc/swagger/*any", func(ctx *gin.Context) { if ctx.Request.RequestURI == "/doc/swagger/doc.json" { // 默认swagger, 通过此接口读取文档数据 From 4ddf55d3710f1d9e377341bf681f2ac82ebfce01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sun, 16 Feb 2025 16:44:57 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=B3=A8=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router/define.go | 6 ---- router/server.go | 59 +++++------------------------------- router/swagger_ui.go | 71 -------------------------------------------- 3 files changed, 8 insertions(+), 128 deletions(-) delete mode 100644 router/swagger_ui.go diff --git a/router/define.go b/router/define.go index 4f00000..605f26e 100644 --- a/router/define.go +++ b/router/define.go @@ -63,9 +63,3 @@ type UriParam struct { const ( FieldNameMeta = "Meta" // 元信息字段 ) - -const ( - SwaggerUIThemeDefault = "swaggerUI" // 文档默认主题 - SwaggerUIThemeKnife4go = "knife4go" // knife4go 主题 - SwaggerUIThemeYDocLucky = "YDocLuckyUI" // YDoc Lucky UI 主题: https://github.com/NoBugBoy/LuckyUI -) diff --git a/router/server.go b/router/server.go index a5e967a..1b7b363 100644 --- a/router/server.go +++ b/router/server.go @@ -9,11 +9,10 @@ package router import ( "fmt" + apiDoc "git.zhangdeman.cn/gateway/api-doc" "net/http" "strings" - "git.zhangdeman.cn/zhangdeman/consts" - apiDocDefine "git.zhangdeman.cn/gateway/api-doc/define" "github.com/gin-gonic/gin" ) @@ -29,20 +28,20 @@ func NewServer(port int, option any) *server { } return &server{ router: gin.Default(), - docInstance: NewDoc(nil, []*apiDocDefine.ServerItem{ + uiInstance: apiDoc.NewSwaggerUI(nil, []*apiDocDefine.ServerItem{ { Url: fmt.Sprintf("http://127.0.0.1:%d", port), Description: "测试服务器", }, - }), // TODO : 配置相关信息 + }, apiDocDefine.SwaggerUIThemeYDocLucky), // TODO : 配置相关信息 port: port, } } type server struct { - router *gin.Engine - port int - docInstance *Doc + router *gin.Engine + port int + uiInstance *apiDoc.SwaggerUI } // Start 启动服务 @@ -68,7 +67,7 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL for _, c := range cList { urlTable := cParser.Parse(c) for _, itemUriCfg := range urlTable { - s.docInstance.Add(routerPrefix, itemUriCfg.FormDataType, itemUriCfg.ResultDataType) + _ = s.uiInstance.DocInstance().AddApiFromInAndOut(routerPrefix, itemUriCfg.FormDataType, itemUriCfg.ResultDataType) method := strings.ToUpper(itemUriCfg.RequestMethod) switch method { case http.MethodGet: @@ -93,47 +92,5 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL } } // 注册文档 - s.SwaggerUI() -} - -// SwaggerUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:45 2025/2/15 -func (s *server) SwaggerUI() { - swaggerInstance := NewSwaggerUI(s.docInstance, SwaggerUIThemeKnife4go) - s.router.GET("/swagger-resources", func(ctx *gin.Context) { // lucky UI获取分组信息 - ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*") // 允许访问所有域 - ctx.JSON(http.StatusOK, []map[string]any{ - { - "name": "服务文档", - "url": "/swagger-ui/doc/openapi.json", - "swaggerVersion": consts.SwaggerDocVersion3, - }, - }) - // ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) - }) - s.router.GET("/swagger-ui/doc/openapi.json", func(ctx *gin.Context) { - ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*") // 允许访问所有域 - ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) - }) - s.router.GET("/doc/swagger/*any", func(ctx *gin.Context) { - if ctx.Request.RequestURI == "/doc/swagger/doc.json" { - // 默认swagger, 通过此接口读取文档数据 - ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) - ctx.Abort() - } - if ctx.Request.RequestURI == "/doc/swagger/openapi.json" { - // knife4go 文档通过此接口读取文档列表 - ctx.JSON(http.StatusOK, []map[string]any{ - { - "name": "服务文档", - "url": "doc.json", - "swaggerVersion": consts.SwaggerDocVersion3, - }, - }) - ctx.Abort() - } - }, swaggerInstance.Handler()) + s.uiInstance.RegisterHandler(s.router, "/doc/swagger") } diff --git a/router/swagger_ui.go b/router/swagger_ui.go deleted file mode 100644 index ca0ed30..0000000 --- a/router/swagger_ui.go +++ /dev/null @@ -1,71 +0,0 @@ -// Package router ... -// -// Description : router ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 2025-02-15 21:20 -package router - -import ( - "github.com/gin-gonic/gin" - knife4goFiles "github.com/go-webtools/knife4go" - knife4goGin "github.com/go-webtools/knife4go/gin" - swaggerFiles "github.com/swaggo/files" - ginSwagger "github.com/swaggo/gin-swagger" -) - -// NewSwaggerUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:21 2025/2/15 -func NewSwaggerUI(docInstance *Doc, uiTheme string) *SwaggerUI { - return &SwaggerUI{ - docInstance: docInstance, - uiTheme: uiTheme, - } -} - -type SwaggerUI struct { - docInstance *Doc // 文档实例 - uiTheme string // 文档主题, swaggerUI / knife4go, 默认 knife4go -} - -// Handler 访问文档的接口处理 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:34 2025/2/15 -func (su *SwaggerUI) Handler() func(ctx *gin.Context) { - switch su.uiTheme { - case SwaggerUIThemeKnife4go: - return su.HandleKnife4goUI() - default: - return su.HandleSwaggerUI() - } -} - -// HandleKnife4goUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:38 2025/2/15 -func (su *SwaggerUI) HandleKnife4goUI() func(ctx *gin.Context) { - resetOption := func(cfg *knife4goGin.Config) { - if nil == cfg { - return - } - cfg.Title = "服务接口文档" - } - return knife4goGin.WrapHandler(knife4goFiles.Handler, resetOption) -} - -// HandleSwaggerUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:41 2025/2/15 -func (su *SwaggerUI) HandleSwaggerUI() func(ctx *gin.Context) { - return ginSwagger.WrapHandler(swaggerFiles.Handler) -} From 3774bda0ffc28c30f4858b1cae5d46143aaf5b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sun, 16 Feb 2025 17:28:22 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E5=8D=87=E7=BA=A7api-doc=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 10 +++------- go.sum | 6 ++++++ router/server.go | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index b04fab5..568a71c 100644 --- a/go.mod +++ b/go.mod @@ -5,15 +5,15 @@ go 1.22.2 toolchain go1.23.6 require ( - git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215124612-0047befc07ba - git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1 + git.zhangdeman.cn/gateway/api-doc v0.0.0-20250216092250-04febf36a1dd + git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250215141718-8232f587a6ea git.zhangdeman.cn/zhangdeman/exception v0.0.0-20250207091724-ca151fbc1f06 git.zhangdeman.cn/zhangdeman/logger v0.0.0-20241125083316-eab7bab9d7ad git.zhangdeman.cn/zhangdeman/network v0.0.0-20230925112156-f0eb86dd2442 git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241223084948-de2e49144fcd git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250124091620-c757e551a8c9 github.com/gin-gonic/gin v1.10.0 - github.com/go-playground/validator/v10 v10.24.0 + github.com/go-playground/validator/v10 v10.25.0 github.com/go-webtools/knife4go v1.0.4 github.com/mcuadros/go-defaults v1.2.0 github.com/sbabiv/xml2map v1.2.1 @@ -79,7 +79,3 @@ require ( gopkg.in/olahol/melody.v1 v1.0.0-20170518105555-d52139073376 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) - -replace ( - git.zhangdeman.cn/gateway/api-doc => ../api-doc -) \ No newline at end of file diff --git a/go.sum b/go.sum index 570f383..631d1aa 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,11 @@ git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215124612-0047befc07ba h1:OeuXovN9tjefSGKCC41nDvs2MFdnGG3/wzqLNbTOuo4= git.zhangdeman.cn/gateway/api-doc v0.0.0-20250215124612-0047befc07ba/go.mod h1:yVIN17cpiLXyAUBYmbb5EOtYhURIZ/K3SpCn93FzVW8= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250216092250-04febf36a1dd h1:RD8D07Yg/d7j7ETHg35it+rvKL5AW0tJbOFz7ZwVdgY= +git.zhangdeman.cn/gateway/api-doc v0.0.0-20250216092250-04febf36a1dd/go.mod h1:oNTwnepzW09RNfIQCpgmbiayTKLvGx2XP92esfkxv98= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1 h1:vv4X72I6s6XcTi0ykj2v/cgMZyseFyE2LkS4WloICCs= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250208020330-a50062af46a1/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250215141718-8232f587a6ea h1:6b9bfq44ewsXGVOkyZ+DQ4dNaKtmNsdHOFQxHUdEQrY= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250215141718-8232f587a6ea/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda h1:bMD6r9gjRy7cO+T4zRQVYAesgIblBdTnhzT1vN5wjvI= git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda/go.mod h1:dT0rmHcJ9Z9IqWeMIt7YzR88nKkNV2V3dfG0j9Q6lK0= git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4 h1:s6d4b6yY+NaK1AzoBD1pxqsuygEHQz0Oie86c45geDw= @@ -67,6 +71,8 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.24.0 h1:KHQckvo8G6hlWnrPX4NJJ+aBfWNAE/HH+qdL2cBpCmg= github.com/go-playground/validator/v10 v10.24.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= +github.com/go-playground/validator/v10 v10.25.0 h1:5Dh7cjvzR7BRZadnsVOzPhWsrwUr0nmsZJxEAnFLNO8= +github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= github.com/go-webtools/knife4go v1.0.4 h1:p32SApmM0sx2/Y5p0QfeaGv5KD96R1mj2CaHdyH8jy8= github.com/go-webtools/knife4go v1.0.4/go.mod h1:trOlXN1tqBJ7R44sHON3exGvzCwjbsVriIHEenry3d8= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= diff --git a/router/server.go b/router/server.go index 1b7b363..ca2e279 100644 --- a/router/server.go +++ b/router/server.go @@ -33,7 +33,7 @@ func NewServer(port int, option any) *server { Url: fmt.Sprintf("http://127.0.0.1:%d", port), Description: "测试服务器", }, - }, apiDocDefine.SwaggerUIThemeYDocLucky), // TODO : 配置相关信息 + }, apiDocDefine.SwaggerUIThemeKnife4go), // TODO : 配置相关信息 port: port, } } From 593df47884a0cefab57985aace8a79ddd194f8c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sun, 16 Feb 2025 17:41:33 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E5=BC=95=E5=85=A5=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E4=B8=AD=E9=97=B4=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router/server.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/router/server.go b/router/server.go index ca2e279..9f2d280 100644 --- a/router/server.go +++ b/router/server.go @@ -10,6 +10,7 @@ package router import ( "fmt" apiDoc "git.zhangdeman.cn/gateway/api-doc" + "git.zhangdeman.cn/zhangdeman/gin/middleware" "net/http" "strings" @@ -26,8 +27,16 @@ func NewServer(port int, option any) *server { if port < 80 { panic("port should be greater than 80") } + r := gin.Default() + r.Use( + // 初始化请求 + middleware.InitRequest(), + /*request_cors.New(request_cors.Config{ + AllowAllOrigins: true, + }), */// middleware.Ac + ) return &server{ - router: gin.Default(), + router: r, uiInstance: apiDoc.NewSwaggerUI(nil, []*apiDocDefine.ServerItem{ { Url: fmt.Sprintf("http://127.0.0.1:%d", port),