Compare commits
	
		
			4 Commits
		
	
	
		
			master
			...
			feature/up
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 38ccde2c37 | |||
| 028d16ac5a | |||
| 1a9bc7b6dd | |||
| 64a3652137 | 
							
								
								
									
										16
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								go.mod
									
									
									
									
									
								
							| @ -5,16 +5,16 @@ go 1.24.1 | ||||
| toolchain go1.24.2 | ||||
|  | ||||
| require ( | ||||
| 	git.zhangdeman.cn/zhangdeman/api-doc v1.0.3-0.20250930090005-69177ebcd195 | ||||
| 	git.zhangdeman.cn/zhangdeman/api-doc v1.0.3-0.20251013152001-868ee8955623 | ||||
| 	git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250916024308-d378e6c57772 | ||||
| 	git.zhangdeman.cn/zhangdeman/dynamic-struct v0.0.0-20250429065800-fc340b9417cf | ||||
| 	git.zhangdeman.cn/zhangdeman/dynamic-struct v0.0.0-20251013092857-dcf591d4e8a8 | ||||
| 	git.zhangdeman.cn/zhangdeman/exception v0.0.0-20250510123912-a0d52fc093ab | ||||
| 	git.zhangdeman.cn/zhangdeman/graceful v0.0.0-20250529070945-92833db6f3a4 | ||||
| 	git.zhangdeman.cn/zhangdeman/logger v0.0.0-20251012094811-1afd71fd8627 | ||||
| 	git.zhangdeman.cn/zhangdeman/network v0.0.0-20250726060351-78810e906bfa | ||||
| 	git.zhangdeman.cn/zhangdeman/logger v0.0.0-20251026044300-152b1320f7ea | ||||
| 	git.zhangdeman.cn/zhangdeman/network v0.0.0-20251013095944-5b89fff39bde | ||||
| 	git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20251013044511-86c1a4a3a9dd | ||||
| 	git.zhangdeman.cn/zhangdeman/trace v0.0.0-20250830115953-2779077bc555 | ||||
| 	git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20251013094128-d57d32b103be | ||||
| 	git.zhangdeman.cn/zhangdeman/trace v0.0.0-20251013092356-b7b9fb5f8a76 | ||||
| 	git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20251014035305-c0ec06fa6dff | ||||
| 	github.com/gin-contrib/pprof v1.5.3 | ||||
| 	github.com/gin-gonic/gin v1.11.0 | ||||
| 	github.com/go-playground/validator/v10 v10.28.0 | ||||
| @ -27,7 +27,7 @@ require ( | ||||
| 	git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20241101082529-28a6c68e38a4 // indirect | ||||
| 	git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20251013024601-da007da2fb42 // indirect | ||||
| 	git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e // indirect | ||||
| 	git.zhangdeman.cn/zhangdeman/websocket v0.0.0-20241125101541-c5ea194c9c1e // indirect | ||||
| 	git.zhangdeman.cn/zhangdeman/websocket v0.0.0-20251013144324-313024336a6f // indirect | ||||
| 	github.com/BurntSushi/toml v1.5.0 // indirect | ||||
| 	github.com/KyleBanks/depth v1.2.1 // indirect | ||||
| 	github.com/bytedance/gopkg v0.1.3 // indirect | ||||
| @ -35,7 +35,7 @@ require ( | ||||
| 	github.com/bytedance/sonic/loader v0.4.0 // indirect | ||||
| 	github.com/cloudwego/base64x v0.1.6 // indirect | ||||
| 	github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 // indirect | ||||
| 	github.com/gabriel-vasile/mimetype v1.4.10 // indirect | ||||
| 	github.com/gabriel-vasile/mimetype v1.4.11 // indirect | ||||
| 	github.com/gin-contrib/sse v1.1.0 // indirect | ||||
| 	github.com/go-ini/ini v1.67.0 // indirect | ||||
| 	github.com/go-openapi/jsonpointer v0.22.1 // indirect | ||||
|  | ||||
							
								
								
									
										26
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								go.sum
									
									
									
									
									
								
							| @ -1,9 +1,13 @@ | ||||
| git.zhangdeman.cn/zhangdeman/api-doc v1.0.3-0.20250930090005-69177ebcd195 h1:S1DqbZdJxKxzEbanmG2I/yycScml7dJbYR+VrXzeuo0= | ||||
| git.zhangdeman.cn/zhangdeman/api-doc v1.0.3-0.20250930090005-69177ebcd195/go.mod h1:tMqiqByNQ5WmFieruKEcEVJv0g2QqA5XSqV0S9WvOZU= | ||||
| git.zhangdeman.cn/zhangdeman/api-doc v1.0.3-0.20251013152001-868ee8955623 h1:QiqETEQx2PBv2fF3UwPS11dsbVDcF3WNCmRRA8zrqAk= | ||||
| git.zhangdeman.cn/zhangdeman/api-doc v1.0.3-0.20251013152001-868ee8955623/go.mod h1:ryyMI2gPgotFD1lZC50p2vRyX8bf3MRwO9tos41z4WU= | ||||
| git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250916024308-d378e6c57772 h1:Yo1ur3LnDF5s7F7tpJsNrdUSF8LwYKnN9TdQU32F3eU= | ||||
| git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250916024308-d378e6c57772/go.mod h1:5p8CEKGBxi7qPtTXDI3HDmqKAfIm5i/aBWdrbkbdNjc= | ||||
| git.zhangdeman.cn/zhangdeman/dynamic-struct v0.0.0-20250429065800-fc340b9417cf h1:xCPM3U6i62UvLo9VNvDP45Ue3dPl7ratHu1rSEJRE2k= | ||||
| git.zhangdeman.cn/zhangdeman/dynamic-struct v0.0.0-20250429065800-fc340b9417cf/go.mod h1:onY+qrB+Uwfuv75JlgHlGdkirAfYcINrvCashtVoBX0= | ||||
| git.zhangdeman.cn/zhangdeman/dynamic-struct v0.0.0-20251013092857-dcf591d4e8a8 h1:Pw981jG3hH9ZHrB3s1xPpsZafgX3USuMAjnGi2GEP9Y= | ||||
| git.zhangdeman.cn/zhangdeman/dynamic-struct v0.0.0-20251013092857-dcf591d4e8a8/go.mod h1:xtCw3om5DRrG30EfQd/lfQPXgptfK7l9oBSt4Kdhjok= | ||||
| 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= | ||||
| @ -14,32 +18,38 @@ git.zhangdeman.cn/zhangdeman/graceful v0.0.0-20250529070945-92833db6f3a4 h1:d1B3 | ||||
| git.zhangdeman.cn/zhangdeman/graceful v0.0.0-20250529070945-92833db6f3a4/go.mod h1:faaKb5d5tz3NmQQ+NrTnBDa1G/tN9/CVuKun1V4WBIE= | ||||
| git.zhangdeman.cn/zhangdeman/logger v0.0.0-20251012094811-1afd71fd8627 h1:chAmVCoiWMcrmm+AfvesrhnZH+3+6LZZb+8UDj/E36M= | ||||
| git.zhangdeman.cn/zhangdeman/logger v0.0.0-20251012094811-1afd71fd8627/go.mod h1:SZsX6q88TdR5JHZenesYhOw1x386ikfs2MkchQmW8D8= | ||||
| git.zhangdeman.cn/zhangdeman/logger v0.0.0-20251026044300-152b1320f7ea h1:w9GfAUCUZU+WM4nl8Ky217tMOmBuPaexvQ2b3SouVZM= | ||||
| git.zhangdeman.cn/zhangdeman/logger v0.0.0-20251026044300-152b1320f7ea/go.mod h1:iHmDeuoAf6jdRHjZOmZ5d1lGTWIvfF2okqXYYr4lJ6o= | ||||
| git.zhangdeman.cn/zhangdeman/network v0.0.0-20250726060351-78810e906bfa h1:r3AK2EKbQ82ShC5+AjbE95sqm90CkpbzLpmoV3zok9Q= | ||||
| git.zhangdeman.cn/zhangdeman/network v0.0.0-20250726060351-78810e906bfa/go.mod h1:v0tMMfXvE4WyUxaRo1r/D20BAbMkT5QPLSW7XtgQOxo= | ||||
| git.zhangdeman.cn/zhangdeman/network v0.0.0-20251013095944-5b89fff39bde h1:+3zIOditaUwzSpl2ybM1PYN4OYTIKiemMBt+pNv3Yko= | ||||
| git.zhangdeman.cn/zhangdeman/network v0.0.0-20251013095944-5b89fff39bde/go.mod h1:Ewh0UYOqXxEh0khgHj9bDz1rbnd7cCCsJrcOTFX/8wg= | ||||
| git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20251013024601-da007da2fb42 h1:VjYrb4adud7FHeiYS9XA0B/tOaJjfRejzQAlwimrrDc= | ||||
| git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20251013024601-da007da2fb42/go.mod h1:VHb9qmhaPDAQDcS6vUiDCamYjZ4R5lD1XtVsh55KsMI= | ||||
| git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20251013044511-86c1a4a3a9dd h1:kTZOpR8iHx27sUufMWVYhDZx9Q4h80j7RWlaR8GIBiU= | ||||
| git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20251013044511-86c1a4a3a9dd/go.mod h1:pLrQ63JICi81/3w2BrD26QZiu+IpddvEVfMJ6No3Xb4= | ||||
| git.zhangdeman.cn/zhangdeman/trace v0.0.0-20250830115953-2779077bc555 h1:XQgYVEui0QKl5NXOvYpAg48zSc81obXF9cOinU8JuqQ= | ||||
| git.zhangdeman.cn/zhangdeman/trace v0.0.0-20250830115953-2779077bc555/go.mod h1:+tLRnfL+ddqljSTOacSJoIv7TpbdWih3efd8Yvk/Hh8= | ||||
| git.zhangdeman.cn/zhangdeman/trace v0.0.0-20251013092356-b7b9fb5f8a76 h1:Y1GME5dg3jFmoURKvuujK07VUNMpsuRR4FkhinfBQIs= | ||||
| git.zhangdeman.cn/zhangdeman/trace v0.0.0-20251013092356-b7b9fb5f8a76/go.mod h1:avN/muzbNjUM2qamRZeY4fuLEmA9cmfslk1dkdtRQBE= | ||||
| 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-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/websocket v0.0.0-20251013144324-313024336a6f h1:InxNoLPHBLwCLblW0lsL2P1ZBYoUEzw9Yh+KNLt4Xmg= | ||||
| git.zhangdeman.cn/zhangdeman/websocket v0.0.0-20251013144324-313024336a6f/go.mod h1:Pbs7tusW6RNcqrNCVcLE2zrM8JfPaO7lBJQuRiAzzLs= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20251013094128-d57d32b103be h1:mlmXacZHRKxmFmFKNFYRjZJ8+z2+QW3CH8L7AzoMTcQ= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20251013094128-d57d32b103be/go.mod h1:mBvTwcdqHRF3QIkAh92j/JRhru2LzyJ2LBqolxjzzKE= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20251014035305-c0ec06fa6dff h1:ym1Qs4diJe27CK/0K6vy7RvgH90mXgslWA++L8mXaKE= | ||||
| git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20251014035305-c0ec06fa6dff/go.mod h1:mBvTwcdqHRF3QIkAh92j/JRhru2LzyJ2LBqolxjzzKE= | ||||
| github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= | ||||
| github.com/BurntSushi/toml v1.5.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/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M= | ||||
| github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= | ||||
| github.com/bytedance/sonic v1.14.1 h1:FBMC0zVz5XUmE4z9wF4Jey0An5FueFvOsTKKKtwIl7w= | ||||
| github.com/bytedance/sonic v1.14.1/go.mod h1:gi6uhQLMbTdeP0muCnrjHLeCUPyb70ujhnNlhOylAFc= | ||||
| github.com/bytedance/sonic v1.14.2 h1:k1twIoe97C1DtYUo+fZQy865IuHia4PR5RPiuGPPIIE= | ||||
| github.com/bytedance/sonic v1.14.2/go.mod h1:T80iDELeHiHKSc0C9tubFygiuXoGzrkjKzX2quAx980= | ||||
| github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= | ||||
| github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= | ||||
| github.com/bytedance/sonic/loader v0.4.0 h1:olZ7lEqcxtZygCK9EKYKADnpQoYkRQxaeY2NYzevs+o= | ||||
| github.com/bytedance/sonic/loader v0.4.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= | ||||
| github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= | ||||
| @ -47,10 +57,11 @@ github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gE | ||||
| 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.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= | ||||
| github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= | ||||
| github.com/gabriel-vasile/mimetype v1.4.11 h1:AQvxbp830wPhHTqc1u7nzoLT+ZFxGY7emj5DR5DYFik= | ||||
| github.com/gabriel-vasile/mimetype v1.4.11/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= | ||||
| 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/pprof v1.5.3 h1:Bj5SxJ3kQDVez/s/+f9+meedJIqLS+xlkIVDe/lcvgM= | ||||
| @ -172,7 +183,6 @@ github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/ | ||||
| github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||||
| github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||||
| 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.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= | ||||
| github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= | ||||
| @ -193,8 +203,6 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= | ||||
| github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= | ||||
| github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= | ||||
| github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= | ||||
| github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA= | ||||
| github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= | ||||
| github.com/ugorji/go/codec v1.3.1 h1:waO7eEiFDwidsBN6agj1vJQ4AG7lh2yqXyOXqhgQuyY= | ||||
| github.com/ugorji/go/codec v1.3.1/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= | ||||
| github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= | ||||
|  | ||||
							
								
								
									
										17
									
								
								logger/define.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								logger/define.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| // Package logger ... | ||||
| // | ||||
| // Description : logger ... | ||||
| // | ||||
| // Author : go_developer@163.com<白茶清欢> | ||||
| // | ||||
| // Date : 2025-10-30 16:56 | ||||
| package logger | ||||
|  | ||||
| // Data 日志数据 | ||||
| type Data struct { | ||||
| 	TraceID   string `json:"trace_id" dc:"trace_id"` | ||||
| 	RequestID string `json:"request_id" dc:"请求ID"` | ||||
| 	UserID    any    `json:"user_id" dc:"用户IP"` | ||||
| 	Hostname  string `json:"hostname" dc:"服务器主机名称"` | ||||
| 	HostIp    string `json:"host_ip" dc:"主机IP"` | ||||
| } | ||||
							
								
								
									
										22
									
								
								logger/instance.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								logger/instance.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| // Package logger ... | ||||
| // | ||||
| // Description : logger ... | ||||
| // | ||||
| // Author : go_developer@163.com<白茶清欢> | ||||
| // | ||||
| // Date : 2025-10-30 16:54 | ||||
| package logger | ||||
|  | ||||
| import "go.uber.org/zap" | ||||
|  | ||||
| var ( | ||||
| 	Instance *zap.Logger = zap.NewNop() | ||||
| ) | ||||
|  | ||||
| // SetInstance 设置日志实例 | ||||
| func SetInstance(l *zap.Logger) { | ||||
| 	if nil == l { | ||||
| 		return | ||||
| 	} | ||||
| 	Instance = l | ||||
| } | ||||
							
								
								
									
										53
									
								
								router/common_param.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								router/common_param.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| // Package router ... | ||||
| // | ||||
| // Description : router ... | ||||
| // | ||||
| // Author : go_developer@163.com<白茶清欢> | ||||
| // | ||||
| // Date : 2025-10-30 15:39 | ||||
| package router | ||||
|  | ||||
| import ( | ||||
| 	"reflect" | ||||
|  | ||||
| 	"git.zhangdeman.cn/zhangdeman/gin/logger" | ||||
| 	"github.com/gin-gonic/gin" | ||||
| ) | ||||
|  | ||||
| // GetCommonParam 获取公共参数 | ||||
| type GetCommonParam func(ctx *gin.Context) (any, error) | ||||
|  | ||||
| // AddCommonParamRule 添加公共参数注入规则 | ||||
| func (s *server) AddCommonParamRule(fieldName string, getParamFunc GetCommonParam) { | ||||
| 	s.commonParam[fieldName] = getParamFunc | ||||
| } | ||||
|  | ||||
| // AddCommonParamRules 批量添加公共参数注入规则 | ||||
| func (s *server) AddCommonParamRules(rules map[string]GetCommonParam) { | ||||
| 	for fieldName, rule := range rules { | ||||
| 		s.AddCommonParamRule(fieldName, rule) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // injectCommonParam 注入公共参数 | ||||
| func (s *server) injectCommonParam(ctx *gin.Context, formValue any) error { | ||||
| 	reflectType := reflect.TypeOf(formValue) | ||||
| 	fieldTable := map[string]bool{} | ||||
| 	fieldNum := reflectType.Elem().NumField() | ||||
| 	for i := 0; i < fieldNum; i++ { | ||||
| 		// 提取全部结构体字段 | ||||
| 		fieldTable[reflectType.Elem().Field(i).Name] = true | ||||
| 	} | ||||
| 	reflectValue := reflect.ValueOf(formValue) | ||||
| 	for fieldName, getParamFunc := range s.commonParam { | ||||
| 		if _, ok := fieldTable[fieldName]; !ok { | ||||
| 			// 结构体字段未配置自动注入 | ||||
| 			continue | ||||
| 		} | ||||
| 		if val, err := getParamFunc(ctx); nil != err { | ||||
| 			logger.Instance.Error("inject common param failed") | ||||
| 			return err | ||||
| 		} | ||||
| 		reflectValue.Elem().FieldByName(fieldName) | ||||
| 	} | ||||
| } | ||||
| @ -12,6 +12,7 @@ import ( | ||||
| 	"reflect" | ||||
| 	"sync" | ||||
|  | ||||
| 	"git.zhangdeman.cn/zhangdeman/consts" | ||||
| 	"git.zhangdeman.cn/zhangdeman/exception" | ||||
| 	"git.zhangdeman.cn/zhangdeman/gin/define" | ||||
| 	"git.zhangdeman.cn/zhangdeman/gin/request" | ||||
| @ -19,33 +20,42 @@ import ( | ||||
| 	"github.com/gin-gonic/gin" | ||||
| ) | ||||
|  | ||||
| func (s *server) getFormInitValue(ctx *gin.Context, uriCfg UriConfig) (any, error) { | ||||
| 	var ( | ||||
| 		formParam reflect.Value | ||||
| 		formValue any | ||||
| 		err       error | ||||
| 	) | ||||
|  | ||||
| 	if uriCfg.FormDataType.Kind() == reflect.Ptr { | ||||
| 		formParam = reflect.New(uriCfg.FormDataType.Elem()) | ||||
| 	} else { | ||||
| 		// 表单解析 | ||||
| 		formParam = reflect.New(uriCfg.FormDataType) | ||||
| 	} | ||||
| 	formValue = formParam.Interface() | ||||
| 	if err = request.Form.Parse(ctx, formValue); nil != err { | ||||
| 		// 格式化验证错误的信息 | ||||
| 		err = GetValidateErr(formValue, err) | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return formValue, nil | ||||
| } | ||||
|  | ||||
| // RequestHandler 获取请求处理方法 | ||||
| // | ||||
| // Author : go_developer@163.com<白茶清欢> | ||||
| // | ||||
| // Date : 19:44 2025/1/27 | ||||
| func RequestHandler(uriCfg UriConfig) gin.HandlerFunc { | ||||
| func (s *server) RequestHandler(uriCfg UriConfig) gin.HandlerFunc { | ||||
| 	return func(ctx *gin.Context) { | ||||
| 		var ( | ||||
| 			err error | ||||
| 			ok  bool | ||||
| 			e   exception.IException | ||||
| 			err       error | ||||
| 			ok        bool | ||||
| 			e         exception.IException | ||||
| 			formValue any | ||||
| 		) | ||||
|  | ||||
| 		var formParam reflect.Value | ||||
| 		if uriCfg.FormDataType.Kind() == reflect.Ptr { | ||||
| 			formParam = reflect.New(uriCfg.FormDataType.Elem()) | ||||
| 		} else { | ||||
| 			// 表单解析 | ||||
| 			formParam = reflect.New(uriCfg.FormDataType) | ||||
| 		} | ||||
| 		formValue := formParam.Interface() | ||||
| 		if err = request.Form.Parse(ctx, formValue); nil != err { | ||||
| 			// 格式化验证错误的信息 | ||||
| 			err = GetValidateErr(formValue, err) | ||||
| 		if formValue, err = s.getFormInitValue(ctx, uriCfg); nil != err { | ||||
| 			e = exception.NewFromError(400, err) | ||||
| 			response.SendWithException(ctx, e, &define.ResponseOption{ | ||||
| 				ContentType: "application/json;charset=utf-8", | ||||
| 				ContentType: consts.MimeTypeJson, | ||||
| 			}) | ||||
| 			ctx.Abort() | ||||
| 			return | ||||
|  | ||||
| @ -11,6 +11,7 @@ import ( | ||||
| 	"fmt" | ||||
| 	"net/http" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
|  | ||||
| 	"git.zhangdeman.cn/zhangdeman/graceful" | ||||
|  | ||||
| @ -129,14 +130,17 @@ func NewServer(port int, optionList ...SetServerOptionFunc) *server { | ||||
| 		uiInstance: apiDoc.NewSwaggerUI(option.serverInfo, option.serverList, apiDocEnum.SwaggerUITheme(option.swaggerUiTheme)), | ||||
| 		port:       port, | ||||
| 		option:     option, | ||||
| 		lock:       &sync.RWMutex{}, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type server struct { | ||||
| 	router     *gin.Engine | ||||
| 	port       int | ||||
| 	uiInstance *apiDoc.SwaggerUI | ||||
| 	option     *serverOption | ||||
| 	router      *gin.Engine | ||||
| 	port        int | ||||
| 	uiInstance  *apiDoc.SwaggerUI | ||||
| 	option      *serverOption | ||||
| 	commonParam map[string]GetCommonParam // 结构体字段名, 注意, 不是TAG | ||||
| 	lock        *sync.RWMutex | ||||
| } | ||||
|  | ||||
| // Start 启动服务 | ||||
| @ -201,21 +205,22 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL | ||||
| 		for _, itemUriCfg := range urlTable { | ||||
| 			_ = s.uiInstance.DocInstance().AddApiFromInAndOut(routerPrefix, itemUriCfg.FormDataType, itemUriCfg.ResultDataType) | ||||
| 			method := strings.ToUpper(itemUriCfg.RequestMethod) | ||||
| 			handleFunc := s.RequestHandler(itemUriCfg) | ||||
| 			switch method { | ||||
| 			case http.MethodGet: | ||||
| 				g.GET(itemUriCfg.Path, RequestHandler(itemUriCfg)) | ||||
| 				g.GET(itemUriCfg.Path, handleFunc) | ||||
| 			case http.MethodHead: | ||||
| 				g.HEAD(itemUriCfg.Path, RequestHandler(itemUriCfg)) | ||||
| 				g.HEAD(itemUriCfg.Path, handleFunc) | ||||
| 			case http.MethodPost: | ||||
| 				g.POST(itemUriCfg.Path, RequestHandler(itemUriCfg)) | ||||
| 				g.POST(itemUriCfg.Path, handleFunc) | ||||
| 			case http.MethodPut: | ||||
| 				g.PUT(itemUriCfg.Path, RequestHandler(itemUriCfg)) | ||||
| 				g.PUT(itemUriCfg.Path, handleFunc) | ||||
| 			case http.MethodPatch: | ||||
| 				g.PATCH(itemUriCfg.Path, RequestHandler(itemUriCfg)) | ||||
| 				g.PATCH(itemUriCfg.Path, handleFunc) | ||||
| 			case http.MethodDelete: | ||||
| 				g.DELETE(itemUriCfg.Path, RequestHandler(itemUriCfg)) | ||||
| 				g.DELETE(itemUriCfg.Path, handleFunc) | ||||
| 			case http.MethodOptions: | ||||
| 				g.OPTIONS(itemUriCfg.Path, RequestHandler(itemUriCfg)) | ||||
| 				g.OPTIONS(itemUriCfg.Path, handleFunc) | ||||
| 			case http.MethodTrace: | ||||
| 				panic(`method Trace is not supported`) | ||||
| 			default: | ||||
|  | ||||
		Reference in New Issue
	
	Block a user