forked from mirror/gin
fix repo
This commit is contained in:
parent
cc367f9125
commit
47d655aef6
|
@ -14,7 +14,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
426
CHANGELOG.md
426
CHANGELOG.md
|
@ -4,67 +4,67 @@
|
||||||
|
|
||||||
### ENHANCEMENTS
|
### ENHANCEMENTS
|
||||||
|
|
||||||
* feat(context): add ContextWithFallback feature flag [#3172](https://github.com/gin-gonic/gin/pull/3172)
|
* feat(context): add ContextWithFallback feature flag [#3172](https://git.internal/re/gin/pull/3172)
|
||||||
|
|
||||||
## Gin v1.8.0
|
## Gin v1.8.0
|
||||||
|
|
||||||
## Break Changes
|
## Break Changes
|
||||||
|
|
||||||
* TrustedProxies: Add default IPv6 support and refactor [#2967](https://github.com/gin-gonic/gin/pull/2967). Please replace `RemoteIP() (net.IP, bool)` with `RemoteIP() net.IP`
|
* TrustedProxies: Add default IPv6 support and refactor [#2967](https://git.internal/re/gin/pull/2967). Please replace `RemoteIP() (net.IP, bool)` with `RemoteIP() net.IP`
|
||||||
* gin.Context with fallback value from gin.Context.Request.Context() [#2751](https://github.com/gin-gonic/gin/pull/2751)
|
* gin.Context with fallback value from gin.Context.Request.Context() [#2751](https://git.internal/re/gin/pull/2751)
|
||||||
|
|
||||||
### BUGFIXES
|
### BUGFIXES
|
||||||
|
|
||||||
* Fixed SetOutput() panics on go 1.17 [#2861](https://github.com/gin-gonic/gin/pull/2861)
|
* Fixed SetOutput() panics on go 1.17 [#2861](https://git.internal/re/gin/pull/2861)
|
||||||
* Fix: wrong when wildcard follows named param [#2983](https://github.com/gin-gonic/gin/pull/2983)
|
* Fix: wrong when wildcard follows named param [#2983](https://git.internal/re/gin/pull/2983)
|
||||||
* Fix: missing sameSite when do context.reset() [#3123](https://github.com/gin-gonic/gin/pull/3123)
|
* Fix: missing sameSite when do context.reset() [#3123](https://git.internal/re/gin/pull/3123)
|
||||||
|
|
||||||
### ENHANCEMENTS
|
### ENHANCEMENTS
|
||||||
|
|
||||||
* Use Header() instead of deprecated HeaderMap [#2694](https://github.com/gin-gonic/gin/pull/2694)
|
* Use Header() instead of deprecated HeaderMap [#2694](https://git.internal/re/gin/pull/2694)
|
||||||
* RouterGroup.Handle regular match optimization of http method [#2685](https://github.com/gin-gonic/gin/pull/2685)
|
* RouterGroup.Handle regular match optimization of http method [#2685](https://git.internal/re/gin/pull/2685)
|
||||||
* Add support go-json, another drop-in json replacement [#2680](https://github.com/gin-gonic/gin/pull/2680)
|
* Add support go-json, another drop-in json replacement [#2680](https://git.internal/re/gin/pull/2680)
|
||||||
* Use errors.New to replace fmt.Errorf will much better [#2707](https://github.com/gin-gonic/gin/pull/2707)
|
* Use errors.New to replace fmt.Errorf will much better [#2707](https://git.internal/re/gin/pull/2707)
|
||||||
* Use Duration.Truncate for truncating precision [#2711](https://github.com/gin-gonic/gin/pull/2711)
|
* Use Duration.Truncate for truncating precision [#2711](https://git.internal/re/gin/pull/2711)
|
||||||
* Get client IP when using Cloudflare [#2723](https://github.com/gin-gonic/gin/pull/2723)
|
* Get client IP when using Cloudflare [#2723](https://git.internal/re/gin/pull/2723)
|
||||||
* Optimize code adjust [#2700](https://github.com/gin-gonic/gin/pull/2700/files)
|
* Optimize code adjust [#2700](https://git.internal/re/gin/pull/2700/files)
|
||||||
* Optimize code and reduce code cyclomatic complexity [#2737](https://github.com/gin-gonic/gin/pull/2737)
|
* Optimize code and reduce code cyclomatic complexity [#2737](https://git.internal/re/gin/pull/2737)
|
||||||
* Improve sliceValidateError.Error performance [#2765](https://github.com/gin-gonic/gin/pull/2765)
|
* Improve sliceValidateError.Error performance [#2765](https://git.internal/re/gin/pull/2765)
|
||||||
* Support custom struct tag [#2720](https://github.com/gin-gonic/gin/pull/2720)
|
* Support custom struct tag [#2720](https://git.internal/re/gin/pull/2720)
|
||||||
* Improve router group tests [#2787](https://github.com/gin-gonic/gin/pull/2787)
|
* Improve router group tests [#2787](https://git.internal/re/gin/pull/2787)
|
||||||
* Fallback Context.Deadline() Context.Done() Context.Err() to Context.Request.Context() [#2769](https://github.com/gin-gonic/gin/pull/2769)
|
* Fallback Context.Deadline() Context.Done() Context.Err() to Context.Request.Context() [#2769](https://git.internal/re/gin/pull/2769)
|
||||||
* Some codes optimize [#2830](https://github.com/gin-gonic/gin/pull/2830) [#2834](https://github.com/gin-gonic/gin/pull/2834) [#2838](https://github.com/gin-gonic/gin/pull/2838) [#2837](https://github.com/gin-gonic/gin/pull/2837) [#2788](https://github.com/gin-gonic/gin/pull/2788) [#2848](https://github.com/gin-gonic/gin/pull/2848) [#2851](https://github.com/gin-gonic/gin/pull/2851) [#2701](https://github.com/gin-gonic/gin/pull/2701)
|
* Some codes optimize [#2830](https://git.internal/re/gin/pull/2830) [#2834](https://git.internal/re/gin/pull/2834) [#2838](https://git.internal/re/gin/pull/2838) [#2837](https://git.internal/re/gin/pull/2837) [#2788](https://git.internal/re/gin/pull/2788) [#2848](https://git.internal/re/gin/pull/2848) [#2851](https://git.internal/re/gin/pull/2851) [#2701](https://git.internal/re/gin/pull/2701)
|
||||||
* TrustedProxies: Add default IPv6 support and refactor [#2967](https://github.com/gin-gonic/gin/pull/2967)
|
* TrustedProxies: Add default IPv6 support and refactor [#2967](https://git.internal/re/gin/pull/2967)
|
||||||
* Test(route): expose performRequest func [#3012](https://github.com/gin-gonic/gin/pull/3012)
|
* Test(route): expose performRequest func [#3012](https://git.internal/re/gin/pull/3012)
|
||||||
* Support h2c with prior knowledge [#1398](https://github.com/gin-gonic/gin/pull/1398)
|
* Support h2c with prior knowledge [#1398](https://git.internal/re/gin/pull/1398)
|
||||||
* Feat attachment filename support utf8 [#3071](https://github.com/gin-gonic/gin/pull/3071)
|
* Feat attachment filename support utf8 [#3071](https://git.internal/re/gin/pull/3071)
|
||||||
* Feat: add StaticFileFS [#2749](https://github.com/gin-gonic/gin/pull/2749)
|
* Feat: add StaticFileFS [#2749](https://git.internal/re/gin/pull/2749)
|
||||||
* Feat(context): return GIN Context from Value method [#2825](https://github.com/gin-gonic/gin/pull/2825)
|
* Feat(context): return GIN Context from Value method [#2825](https://git.internal/re/gin/pull/2825)
|
||||||
* Feat: automatically SetMode to TestMode when run go test [#3139](https://github.com/gin-gonic/gin/pull/3139)
|
* Feat: automatically SetMode to TestMode when run go test [#3139](https://git.internal/re/gin/pull/3139)
|
||||||
* Add TOML bining for gin [#3081](https://github.com/gin-gonic/gin/pull/3081)
|
* Add TOML bining for gin [#3081](https://git.internal/re/gin/pull/3081)
|
||||||
* IPv6 add default trusted proxies [#3033](https://github.com/gin-gonic/gin/pull/3033)
|
* IPv6 add default trusted proxies [#3033](https://git.internal/re/gin/pull/3033)
|
||||||
|
|
||||||
### DOCS
|
### DOCS
|
||||||
|
|
||||||
* Add note about nomsgpack tag to the readme [#2703](https://github.com/gin-gonic/gin/pull/2703)
|
* Add note about nomsgpack tag to the readme [#2703](https://git.internal/re/gin/pull/2703)
|
||||||
|
|
||||||
## Gin v1.7.7
|
## Gin v1.7.7
|
||||||
|
|
||||||
### BUGFIXES
|
### BUGFIXES
|
||||||
|
|
||||||
* Fixed X-Forwarded-For unsafe handling of CVE-2020-28483 [#2844](https://github.com/gin-gonic/gin/pull/2844), closed issue [#2862](https://github.com/gin-gonic/gin/issues/2862).
|
* Fixed X-Forwarded-For unsafe handling of CVE-2020-28483 [#2844](https://git.internal/re/gin/pull/2844), closed issue [#2862](https://git.internal/re/gin/issues/2862).
|
||||||
* Tree: updated the code logic for `latestNode` [#2897](https://github.com/gin-gonic/gin/pull/2897), closed issue [#2894](https://github.com/gin-gonic/gin/issues/2894) [#2878](https://github.com/gin-gonic/gin/issues/2878).
|
* Tree: updated the code logic for `latestNode` [#2897](https://git.internal/re/gin/pull/2897), closed issue [#2894](https://git.internal/re/gin/issues/2894) [#2878](https://git.internal/re/gin/issues/2878).
|
||||||
* Tree: fixed the misplacement of adding slashes [#2847](https://github.com/gin-gonic/gin/pull/2847), closed issue [#2843](https://github.com/gin-gonic/gin/issues/2843).
|
* Tree: fixed the misplacement of adding slashes [#2847](https://git.internal/re/gin/pull/2847), closed issue [#2843](https://git.internal/re/gin/issues/2843).
|
||||||
* Tree: fixed tsr with mixed static and wildcard paths [#2924](https://github.com/gin-gonic/gin/pull/2924), closed issue [#2918](https://github.com/gin-gonic/gin/issues/2918).
|
* Tree: fixed tsr with mixed static and wildcard paths [#2924](https://git.internal/re/gin/pull/2924), closed issue [#2918](https://git.internal/re/gin/issues/2918).
|
||||||
|
|
||||||
### ENHANCEMENTS
|
### ENHANCEMENTS
|
||||||
|
|
||||||
* TrustedProxies: make it backward-compatible [#2887](https://github.com/gin-gonic/gin/pull/2887), closed issue [#2819](https://github.com/gin-gonic/gin/issues/2819).
|
* TrustedProxies: make it backward-compatible [#2887](https://git.internal/re/gin/pull/2887), closed issue [#2819](https://git.internal/re/gin/issues/2819).
|
||||||
* TrustedPlatform: provide custom options for another CDN services [#2906](https://github.com/gin-gonic/gin/pull/2906).
|
* TrustedPlatform: provide custom options for another CDN services [#2906](https://git.internal/re/gin/pull/2906).
|
||||||
|
|
||||||
### DOCS
|
### DOCS
|
||||||
|
|
||||||
* NoMethod: added usage annotation ([#2832](https://github.com/gin-gonic/gin/pull/2832#issuecomment-929954463)).
|
* NoMethod: added usage annotation ([#2832](https://git.internal/re/gin/pull/2832#issuecomment-929954463)).
|
||||||
|
|
||||||
## Gin v1.7.6
|
## Gin v1.7.6
|
||||||
|
|
||||||
|
@ -82,234 +82,234 @@
|
||||||
|
|
||||||
### BUGFIXES
|
### BUGFIXES
|
||||||
|
|
||||||
* fix level 1 router match [#2767](https://github.com/gin-gonic/gin/issues/2767), [#2796](https://github.com/gin-gonic/gin/issues/2796)
|
* fix level 1 router match [#2767](https://git.internal/re/gin/issues/2767), [#2796](https://git.internal/re/gin/issues/2796)
|
||||||
|
|
||||||
## Gin v1.7.2
|
## Gin v1.7.2
|
||||||
|
|
||||||
### BUGFIXES
|
### BUGFIXES
|
||||||
|
|
||||||
* Fix conflict between param and exact path [#2706](https://github.com/gin-gonic/gin/issues/2706). Close issue [#2682](https://github.com/gin-gonic/gin/issues/2682) [#2696](https://github.com/gin-gonic/gin/issues/2696).
|
* Fix conflict between param and exact path [#2706](https://git.internal/re/gin/issues/2706). Close issue [#2682](https://git.internal/re/gin/issues/2682) [#2696](https://git.internal/re/gin/issues/2696).
|
||||||
|
|
||||||
## Gin v1.7.1
|
## Gin v1.7.1
|
||||||
|
|
||||||
### BUGFIXES
|
### BUGFIXES
|
||||||
|
|
||||||
* fix: data race with trustedCIDRs from [#2674](https://github.com/gin-gonic/gin/issues/2674)([#2675](https://github.com/gin-gonic/gin/pull/2675))
|
* fix: data race with trustedCIDRs from [#2674](https://git.internal/re/gin/issues/2674)([#2675](https://git.internal/re/gin/pull/2675))
|
||||||
|
|
||||||
## Gin v1.7.0
|
## Gin v1.7.0
|
||||||
|
|
||||||
### BUGFIXES
|
### BUGFIXES
|
||||||
|
|
||||||
* fix compile error from [#2572](https://github.com/gin-gonic/gin/pull/2572) ([#2600](https://github.com/gin-gonic/gin/pull/2600))
|
* fix compile error from [#2572](https://git.internal/re/gin/pull/2572) ([#2600](https://git.internal/re/gin/pull/2600))
|
||||||
* fix: print headers without Authorization header on broken pipe ([#2528](https://github.com/gin-gonic/gin/pull/2528))
|
* fix: print headers without Authorization header on broken pipe ([#2528](https://git.internal/re/gin/pull/2528))
|
||||||
* fix(tree): reassign fullpath when register new node ([#2366](https://github.com/gin-gonic/gin/pull/2366))
|
* fix(tree): reassign fullpath when register new node ([#2366](https://git.internal/re/gin/pull/2366))
|
||||||
|
|
||||||
### ENHANCEMENTS
|
### ENHANCEMENTS
|
||||||
|
|
||||||
* Support params and exact routes without creating conflicts ([#2663](https://github.com/gin-gonic/gin/pull/2663))
|
* Support params and exact routes without creating conflicts ([#2663](https://git.internal/re/gin/pull/2663))
|
||||||
* chore: improve render string performance ([#2365](https://github.com/gin-gonic/gin/pull/2365))
|
* chore: improve render string performance ([#2365](https://git.internal/re/gin/pull/2365))
|
||||||
* Sync route tree to httprouter latest code ([#2368](https://github.com/gin-gonic/gin/pull/2368))
|
* Sync route tree to httprouter latest code ([#2368](https://git.internal/re/gin/pull/2368))
|
||||||
* chore: rename getQueryCache/getFormCache to initQueryCache/initFormCa ([#2375](https://github.com/gin-gonic/gin/pull/2375))
|
* chore: rename getQueryCache/getFormCache to initQueryCache/initFormCa ([#2375](https://git.internal/re/gin/pull/2375))
|
||||||
* chore(performance): improve countParams ([#2378](https://github.com/gin-gonic/gin/pull/2378))
|
* chore(performance): improve countParams ([#2378](https://git.internal/re/gin/pull/2378))
|
||||||
* Remove some functions that have the same effect as the bytes package ([#2387](https://github.com/gin-gonic/gin/pull/2387))
|
* Remove some functions that have the same effect as the bytes package ([#2387](https://git.internal/re/gin/pull/2387))
|
||||||
* update:SetMode function ([#2321](https://github.com/gin-gonic/gin/pull/2321))
|
* update:SetMode function ([#2321](https://git.internal/re/gin/pull/2321))
|
||||||
* remove an unused type SecureJSONPrefix ([#2391](https://github.com/gin-gonic/gin/pull/2391))
|
* remove an unused type SecureJSONPrefix ([#2391](https://git.internal/re/gin/pull/2391))
|
||||||
* Add a redirect sample for POST method ([#2389](https://github.com/gin-gonic/gin/pull/2389))
|
* Add a redirect sample for POST method ([#2389](https://git.internal/re/gin/pull/2389))
|
||||||
* Add CustomRecovery builtin middleware ([#2322](https://github.com/gin-gonic/gin/pull/2322))
|
* Add CustomRecovery builtin middleware ([#2322](https://git.internal/re/gin/pull/2322))
|
||||||
* binding: avoid 2038 problem on 32-bit architectures ([#2450](https://github.com/gin-gonic/gin/pull/2450))
|
* binding: avoid 2038 problem on 32-bit architectures ([#2450](https://git.internal/re/gin/pull/2450))
|
||||||
* Prevent panic in Context.GetQuery() when there is no Request ([#2412](https://github.com/gin-gonic/gin/pull/2412))
|
* Prevent panic in Context.GetQuery() when there is no Request ([#2412](https://git.internal/re/gin/pull/2412))
|
||||||
* Add GetUint and GetUint64 method on gin.context ([#2487](https://github.com/gin-gonic/gin/pull/2487))
|
* Add GetUint and GetUint64 method on gin.context ([#2487](https://git.internal/re/gin/pull/2487))
|
||||||
* update content-disposition header to MIME-style ([#2512](https://github.com/gin-gonic/gin/pull/2512))
|
* update content-disposition header to MIME-style ([#2512](https://git.internal/re/gin/pull/2512))
|
||||||
* reduce allocs and improve the render `WriteString` ([#2508](https://github.com/gin-gonic/gin/pull/2508))
|
* reduce allocs and improve the render `WriteString` ([#2508](https://git.internal/re/gin/pull/2508))
|
||||||
* implement ".Unwrap() error" on Error type ([#2525](https://github.com/gin-gonic/gin/pull/2525)) ([#2526](https://github.com/gin-gonic/gin/pull/2526))
|
* implement ".Unwrap() error" on Error type ([#2525](https://git.internal/re/gin/pull/2525)) ([#2526](https://git.internal/re/gin/pull/2526))
|
||||||
* Allow bind with a map[string]string ([#2484](https://github.com/gin-gonic/gin/pull/2484))
|
* Allow bind with a map[string]string ([#2484](https://git.internal/re/gin/pull/2484))
|
||||||
* chore: update tree ([#2371](https://github.com/gin-gonic/gin/pull/2371))
|
* chore: update tree ([#2371](https://git.internal/re/gin/pull/2371))
|
||||||
* Support binding for slice/array obj [Rewrite] ([#2302](https://github.com/gin-gonic/gin/pull/2302))
|
* Support binding for slice/array obj [Rewrite] ([#2302](https://git.internal/re/gin/pull/2302))
|
||||||
* basic auth: fix timing oracle ([#2609](https://github.com/gin-gonic/gin/pull/2609))
|
* basic auth: fix timing oracle ([#2609](https://git.internal/re/gin/pull/2609))
|
||||||
* Add mixed param and non-param paths (port of httprouter[#329](https://github.com/gin-gonic/gin/pull/329)) ([#2663](https://github.com/gin-gonic/gin/pull/2663))
|
* Add mixed param and non-param paths (port of httprouter[#329](https://git.internal/re/gin/pull/329)) ([#2663](https://git.internal/re/gin/pull/2663))
|
||||||
* feat(engine): add trustedproxies and remoteIP ([#2632](https://github.com/gin-gonic/gin/pull/2632))
|
* feat(engine): add trustedproxies and remoteIP ([#2632](https://git.internal/re/gin/pull/2632))
|
||||||
|
|
||||||
## Gin v1.6.3
|
## Gin v1.6.3
|
||||||
|
|
||||||
### ENHANCEMENTS
|
### ENHANCEMENTS
|
||||||
|
|
||||||
* Improve performance: Change `*sync.RWMutex` to `sync.RWMutex` in context. [#2351](https://github.com/gin-gonic/gin/pull/2351)
|
* Improve performance: Change `*sync.RWMutex` to `sync.RWMutex` in context. [#2351](https://git.internal/re/gin/pull/2351)
|
||||||
|
|
||||||
## Gin v1.6.2
|
## Gin v1.6.2
|
||||||
|
|
||||||
### BUGFIXES
|
### BUGFIXES
|
||||||
* fix missing initial sync.RWMutex [#2305](https://github.com/gin-gonic/gin/pull/2305)
|
* fix missing initial sync.RWMutex [#2305](https://git.internal/re/gin/pull/2305)
|
||||||
### ENHANCEMENTS
|
### ENHANCEMENTS
|
||||||
* Add set samesite in cookie. [#2306](https://github.com/gin-gonic/gin/pull/2306)
|
* Add set samesite in cookie. [#2306](https://git.internal/re/gin/pull/2306)
|
||||||
|
|
||||||
## Gin v1.6.1
|
## Gin v1.6.1
|
||||||
|
|
||||||
### BUGFIXES
|
### BUGFIXES
|
||||||
* Revert "fix accept incoming network connections" [#2294](https://github.com/gin-gonic/gin/pull/2294)
|
* Revert "fix accept incoming network connections" [#2294](https://git.internal/re/gin/pull/2294)
|
||||||
|
|
||||||
## Gin v1.6.0
|
## Gin v1.6.0
|
||||||
|
|
||||||
### BREAKING
|
### BREAKING
|
||||||
* chore(performance): Improve performance for adding RemoveExtraSlash flag [#2159](https://github.com/gin-gonic/gin/pull/2159)
|
* chore(performance): Improve performance for adding RemoveExtraSlash flag [#2159](https://git.internal/re/gin/pull/2159)
|
||||||
* drop support govendor [#2148](https://github.com/gin-gonic/gin/pull/2148)
|
* drop support govendor [#2148](https://git.internal/re/gin/pull/2148)
|
||||||
* Added support for SameSite cookie flag [#1615](https://github.com/gin-gonic/gin/pull/1615)
|
* Added support for SameSite cookie flag [#1615](https://git.internal/re/gin/pull/1615)
|
||||||
### FEATURES
|
### FEATURES
|
||||||
* add yaml negotiation [#2220](https://github.com/gin-gonic/gin/pull/2220)
|
* add yaml negotiation [#2220](https://git.internal/re/gin/pull/2220)
|
||||||
* FileFromFS [#2112](https://github.com/gin-gonic/gin/pull/2112)
|
* FileFromFS [#2112](https://git.internal/re/gin/pull/2112)
|
||||||
### BUGFIXES
|
### BUGFIXES
|
||||||
* Unix Socket Handling [#2280](https://github.com/gin-gonic/gin/pull/2280)
|
* Unix Socket Handling [#2280](https://git.internal/re/gin/pull/2280)
|
||||||
* Use json marshall in context json to fix breaking new line issue. Fixes #2209 [#2228](https://github.com/gin-gonic/gin/pull/2228)
|
* Use json marshall in context json to fix breaking new line issue. Fixes #2209 [#2228](https://git.internal/re/gin/pull/2228)
|
||||||
* fix accept incoming network connections [#2216](https://github.com/gin-gonic/gin/pull/2216)
|
* fix accept incoming network connections [#2216](https://git.internal/re/gin/pull/2216)
|
||||||
* Fixed a bug in the calculation of the maximum number of parameters [#2166](https://github.com/gin-gonic/gin/pull/2166)
|
* Fixed a bug in the calculation of the maximum number of parameters [#2166](https://git.internal/re/gin/pull/2166)
|
||||||
* [FIX] allow empty headers on DataFromReader [#2121](https://github.com/gin-gonic/gin/pull/2121)
|
* [FIX] allow empty headers on DataFromReader [#2121](https://git.internal/re/gin/pull/2121)
|
||||||
* Add mutex for protect Context.Keys map [#1391](https://github.com/gin-gonic/gin/pull/1391)
|
* Add mutex for protect Context.Keys map [#1391](https://git.internal/re/gin/pull/1391)
|
||||||
### ENHANCEMENTS
|
### ENHANCEMENTS
|
||||||
* Add mitigation for log injection [#2277](https://github.com/gin-gonic/gin/pull/2277)
|
* Add mitigation for log injection [#2277](https://git.internal/re/gin/pull/2277)
|
||||||
* tree: range over nodes values [#2229](https://github.com/gin-gonic/gin/pull/2229)
|
* tree: range over nodes values [#2229](https://git.internal/re/gin/pull/2229)
|
||||||
* tree: remove duplicate assignment [#2222](https://github.com/gin-gonic/gin/pull/2222)
|
* tree: remove duplicate assignment [#2222](https://git.internal/re/gin/pull/2222)
|
||||||
* chore: upgrade go-isatty and json-iterator/go [#2215](https://github.com/gin-gonic/gin/pull/2215)
|
* chore: upgrade go-isatty and json-iterator/go [#2215](https://git.internal/re/gin/pull/2215)
|
||||||
* path: sync code with httprouter [#2212](https://github.com/gin-gonic/gin/pull/2212)
|
* path: sync code with httprouter [#2212](https://git.internal/re/gin/pull/2212)
|
||||||
* Use zero-copy approach to convert types between string and byte slice [#2206](https://github.com/gin-gonic/gin/pull/2206)
|
* Use zero-copy approach to convert types between string and byte slice [#2206](https://git.internal/re/gin/pull/2206)
|
||||||
* Reuse bytes when cleaning the URL paths [#2179](https://github.com/gin-gonic/gin/pull/2179)
|
* Reuse bytes when cleaning the URL paths [#2179](https://git.internal/re/gin/pull/2179)
|
||||||
* tree: remove one else statement [#2177](https://github.com/gin-gonic/gin/pull/2177)
|
* tree: remove one else statement [#2177](https://git.internal/re/gin/pull/2177)
|
||||||
* tree: sync httprouter update (#2173) (#2172) [#2171](https://github.com/gin-gonic/gin/pull/2171)
|
* tree: sync httprouter update (#2173) (#2172) [#2171](https://git.internal/re/gin/pull/2171)
|
||||||
* tree: sync part httprouter codes and reduce if/else [#2163](https://github.com/gin-gonic/gin/pull/2163)
|
* tree: sync part httprouter codes and reduce if/else [#2163](https://git.internal/re/gin/pull/2163)
|
||||||
* use http method constant [#2155](https://github.com/gin-gonic/gin/pull/2155)
|
* use http method constant [#2155](https://git.internal/re/gin/pull/2155)
|
||||||
* upgrade go-validator to v10 [#2149](https://github.com/gin-gonic/gin/pull/2149)
|
* upgrade go-validator to v10 [#2149](https://git.internal/re/gin/pull/2149)
|
||||||
* Refactor redirect request in gin.go [#1970](https://github.com/gin-gonic/gin/pull/1970)
|
* Refactor redirect request in gin.go [#1970](https://git.internal/re/gin/pull/1970)
|
||||||
* Add build tag nomsgpack [#1852](https://github.com/gin-gonic/gin/pull/1852)
|
* Add build tag nomsgpack [#1852](https://git.internal/re/gin/pull/1852)
|
||||||
### DOCS
|
### DOCS
|
||||||
* docs(path): improve comments [#2223](https://github.com/gin-gonic/gin/pull/2223)
|
* docs(path): improve comments [#2223](https://git.internal/re/gin/pull/2223)
|
||||||
* Renew README to fit the modification of SetCookie method [#2217](https://github.com/gin-gonic/gin/pull/2217)
|
* Renew README to fit the modification of SetCookie method [#2217](https://git.internal/re/gin/pull/2217)
|
||||||
* Fix spelling [#2202](https://github.com/gin-gonic/gin/pull/2202)
|
* Fix spelling [#2202](https://git.internal/re/gin/pull/2202)
|
||||||
* Remove broken link from README. [#2198](https://github.com/gin-gonic/gin/pull/2198)
|
* Remove broken link from README. [#2198](https://git.internal/re/gin/pull/2198)
|
||||||
* Update docs on Context.Done(), Context.Deadline() and Context.Err() [#2196](https://github.com/gin-gonic/gin/pull/2196)
|
* Update docs on Context.Done(), Context.Deadline() and Context.Err() [#2196](https://git.internal/re/gin/pull/2196)
|
||||||
* Update validator to v10 [#2190](https://github.com/gin-gonic/gin/pull/2190)
|
* Update validator to v10 [#2190](https://git.internal/re/gin/pull/2190)
|
||||||
* upgrade go-validator to v10 for README [#2189](https://github.com/gin-gonic/gin/pull/2189)
|
* upgrade go-validator to v10 for README [#2189](https://git.internal/re/gin/pull/2189)
|
||||||
* Update to currently output [#2188](https://github.com/gin-gonic/gin/pull/2188)
|
* Update to currently output [#2188](https://git.internal/re/gin/pull/2188)
|
||||||
* Fix "Custom Validators" example [#2186](https://github.com/gin-gonic/gin/pull/2186)
|
* Fix "Custom Validators" example [#2186](https://git.internal/re/gin/pull/2186)
|
||||||
* Add project to README [#2165](https://github.com/gin-gonic/gin/pull/2165)
|
* Add project to README [#2165](https://git.internal/re/gin/pull/2165)
|
||||||
* docs(benchmarks): for gin v1.5 [#2153](https://github.com/gin-gonic/gin/pull/2153)
|
* docs(benchmarks): for gin v1.5 [#2153](https://git.internal/re/gin/pull/2153)
|
||||||
* Changed wording for clarity in README.md [#2122](https://github.com/gin-gonic/gin/pull/2122)
|
* Changed wording for clarity in README.md [#2122](https://git.internal/re/gin/pull/2122)
|
||||||
### MISC
|
### MISC
|
||||||
* ci support go1.14 [#2262](https://github.com/gin-gonic/gin/pull/2262)
|
* ci support go1.14 [#2262](https://git.internal/re/gin/pull/2262)
|
||||||
* chore: upgrade depend version [#2231](https://github.com/gin-gonic/gin/pull/2231)
|
* chore: upgrade depend version [#2231](https://git.internal/re/gin/pull/2231)
|
||||||
* Drop support go1.10 [#2147](https://github.com/gin-gonic/gin/pull/2147)
|
* Drop support go1.10 [#2147](https://git.internal/re/gin/pull/2147)
|
||||||
* fix comment in `mode.go` [#2129](https://github.com/gin-gonic/gin/pull/2129)
|
* fix comment in `mode.go` [#2129](https://git.internal/re/gin/pull/2129)
|
||||||
|
|
||||||
## Gin v1.5.0
|
## Gin v1.5.0
|
||||||
|
|
||||||
- [FIX] Use DefaultWriter and DefaultErrorWriter for debug messages [#1891](https://github.com/gin-gonic/gin/pull/1891)
|
- [FIX] Use DefaultWriter and DefaultErrorWriter for debug messages [#1891](https://git.internal/re/gin/pull/1891)
|
||||||
- [NEW] Now you can parse the inline lowercase start structure [#1893](https://github.com/gin-gonic/gin/pull/1893)
|
- [NEW] Now you can parse the inline lowercase start structure [#1893](https://git.internal/re/gin/pull/1893)
|
||||||
- [FIX] Some code improvements [#1909](https://github.com/gin-gonic/gin/pull/1909)
|
- [FIX] Some code improvements [#1909](https://git.internal/re/gin/pull/1909)
|
||||||
- [FIX] Use encode replace json marshal increase json encoder speed [#1546](https://github.com/gin-gonic/gin/pull/1546)
|
- [FIX] Use encode replace json marshal increase json encoder speed [#1546](https://git.internal/re/gin/pull/1546)
|
||||||
- [NEW] Hold matched route full path in the Context [#1826](https://github.com/gin-gonic/gin/pull/1826)
|
- [NEW] Hold matched route full path in the Context [#1826](https://git.internal/re/gin/pull/1826)
|
||||||
- [FIX] Fix context.Params race condition on Copy() [#1841](https://github.com/gin-gonic/gin/pull/1841)
|
- [FIX] Fix context.Params race condition on Copy() [#1841](https://git.internal/re/gin/pull/1841)
|
||||||
- [NEW] Add context param query cache [#1450](https://github.com/gin-gonic/gin/pull/1450)
|
- [NEW] Add context param query cache [#1450](https://git.internal/re/gin/pull/1450)
|
||||||
- [FIX] Improve GetQueryMap performance [#1918](https://github.com/gin-gonic/gin/pull/1918)
|
- [FIX] Improve GetQueryMap performance [#1918](https://git.internal/re/gin/pull/1918)
|
||||||
- [FIX] Improve get post data [#1920](https://github.com/gin-gonic/gin/pull/1920)
|
- [FIX] Improve get post data [#1920](https://git.internal/re/gin/pull/1920)
|
||||||
- [FIX] Use context instead of x/net/context [#1922](https://github.com/gin-gonic/gin/pull/1922)
|
- [FIX] Use context instead of x/net/context [#1922](https://git.internal/re/gin/pull/1922)
|
||||||
- [FIX] Attempt to fix PostForm cache bug [#1931](https://github.com/gin-gonic/gin/pull/1931)
|
- [FIX] Attempt to fix PostForm cache bug [#1931](https://git.internal/re/gin/pull/1931)
|
||||||
- [NEW] Add support of multipart multi files [#1949](https://github.com/gin-gonic/gin/pull/1949)
|
- [NEW] Add support of multipart multi files [#1949](https://git.internal/re/gin/pull/1949)
|
||||||
- [NEW] Support bind http header param [#1957](https://github.com/gin-gonic/gin/pull/1957)
|
- [NEW] Support bind http header param [#1957](https://git.internal/re/gin/pull/1957)
|
||||||
- [FIX] Drop support for go1.8 and go1.9 [#1933](https://github.com/gin-gonic/gin/pull/1933)
|
- [FIX] Drop support for go1.8 and go1.9 [#1933](https://git.internal/re/gin/pull/1933)
|
||||||
- [FIX] Bugfix for the FullPath feature [#1919](https://github.com/gin-gonic/gin/pull/1919)
|
- [FIX] Bugfix for the FullPath feature [#1919](https://git.internal/re/gin/pull/1919)
|
||||||
- [FIX] Gin1.5 bytes.Buffer to strings.Builder [#1939](https://github.com/gin-gonic/gin/pull/1939)
|
- [FIX] Gin1.5 bytes.Buffer to strings.Builder [#1939](https://git.internal/re/gin/pull/1939)
|
||||||
- [FIX] Upgrade github.com/ugorji/go/codec [#1969](https://github.com/gin-gonic/gin/pull/1969)
|
- [FIX] Upgrade github.com/ugorji/go/codec [#1969](https://git.internal/re/gin/pull/1969)
|
||||||
- [NEW] Support bind unix time [#1980](https://github.com/gin-gonic/gin/pull/1980)
|
- [NEW] Support bind unix time [#1980](https://git.internal/re/gin/pull/1980)
|
||||||
- [FIX] Simplify code [#2004](https://github.com/gin-gonic/gin/pull/2004)
|
- [FIX] Simplify code [#2004](https://git.internal/re/gin/pull/2004)
|
||||||
- [NEW] Support negative Content-Length in DataFromReader [#1981](https://github.com/gin-gonic/gin/pull/1981)
|
- [NEW] Support negative Content-Length in DataFromReader [#1981](https://git.internal/re/gin/pull/1981)
|
||||||
- [FIX] Identify terminal on a RISC-V architecture for auto-colored logs [#2019](https://github.com/gin-gonic/gin/pull/2019)
|
- [FIX] Identify terminal on a RISC-V architecture for auto-colored logs [#2019](https://git.internal/re/gin/pull/2019)
|
||||||
- [BREAKING] `Context.JSONP()` now expects a semicolon (`;`) at the end [#2007](https://github.com/gin-gonic/gin/pull/2007)
|
- [BREAKING] `Context.JSONP()` now expects a semicolon (`;`) at the end [#2007](https://git.internal/re/gin/pull/2007)
|
||||||
- [BREAKING] Upgrade default `binding.Validator` to v9 (see [its changelog](https://github.com/go-playground/validator/releases/tag/v9.0.0)) [#1015](https://github.com/gin-gonic/gin/pull/1015)
|
- [BREAKING] Upgrade default `binding.Validator` to v9 (see [its changelog](https://github.com/go-playground/validator/releases/tag/v9.0.0)) [#1015](https://git.internal/re/gin/pull/1015)
|
||||||
- [NEW] Add `DisallowUnknownFields()` in `Context.BindJSON()` [#2028](https://github.com/gin-gonic/gin/pull/2028)
|
- [NEW] Add `DisallowUnknownFields()` in `Context.BindJSON()` [#2028](https://git.internal/re/gin/pull/2028)
|
||||||
- [NEW] Use specific `net.Listener` with `Engine.RunListener()` [#2023](https://github.com/gin-gonic/gin/pull/2023)
|
- [NEW] Use specific `net.Listener` with `Engine.RunListener()` [#2023](https://git.internal/re/gin/pull/2023)
|
||||||
- [FIX] Fix some typo [#2079](https://github.com/gin-gonic/gin/pull/2079) [#2080](https://github.com/gin-gonic/gin/pull/2080)
|
- [FIX] Fix some typo [#2079](https://git.internal/re/gin/pull/2079) [#2080](https://git.internal/re/gin/pull/2080)
|
||||||
- [FIX] Relocate binding body tests [#2086](https://github.com/gin-gonic/gin/pull/2086)
|
- [FIX] Relocate binding body tests [#2086](https://git.internal/re/gin/pull/2086)
|
||||||
- [FIX] Use Writer in Context.Status [#1606](https://github.com/gin-gonic/gin/pull/1606)
|
- [FIX] Use Writer in Context.Status [#1606](https://git.internal/re/gin/pull/1606)
|
||||||
- [FIX] `Engine.RunUnix()` now returns the error if it can't change the file mode [#2093](https://github.com/gin-gonic/gin/pull/2093)
|
- [FIX] `Engine.RunUnix()` now returns the error if it can't change the file mode [#2093](https://git.internal/re/gin/pull/2093)
|
||||||
- [FIX] `RouterGroup.StaticFS()` leaked files. Now it closes them. [#2118](https://github.com/gin-gonic/gin/pull/2118)
|
- [FIX] `RouterGroup.StaticFS()` leaked files. Now it closes them. [#2118](https://git.internal/re/gin/pull/2118)
|
||||||
- [FIX] `Context.Request.FormFile` leaked file. Now it closes it. [#2114](https://github.com/gin-gonic/gin/pull/2114)
|
- [FIX] `Context.Request.FormFile` leaked file. Now it closes it. [#2114](https://git.internal/re/gin/pull/2114)
|
||||||
- [FIX] Ignore walking on `form:"-"` mapping [#1943](https://github.com/gin-gonic/gin/pull/1943)
|
- [FIX] Ignore walking on `form:"-"` mapping [#1943](https://git.internal/re/gin/pull/1943)
|
||||||
|
|
||||||
### Gin v1.4.0
|
### Gin v1.4.0
|
||||||
|
|
||||||
- [NEW] Support for [Go Modules](https://github.com/golang/go/wiki/Modules) [#1569](https://github.com/gin-gonic/gin/pull/1569)
|
- [NEW] Support for [Go Modules](https://github.com/golang/go/wiki/Modules) [#1569](https://git.internal/re/gin/pull/1569)
|
||||||
- [NEW] Refactor of form mapping multipart request [#1829](https://github.com/gin-gonic/gin/pull/1829)
|
- [NEW] Refactor of form mapping multipart request [#1829](https://git.internal/re/gin/pull/1829)
|
||||||
- [FIX] Truncate Latency precision in long running request [#1830](https://github.com/gin-gonic/gin/pull/1830)
|
- [FIX] Truncate Latency precision in long running request [#1830](https://git.internal/re/gin/pull/1830)
|
||||||
- [FIX] IsTerm flag should not be affected by DisableConsoleColor method. [#1802](https://github.com/gin-gonic/gin/pull/1802)
|
- [FIX] IsTerm flag should not be affected by DisableConsoleColor method. [#1802](https://git.internal/re/gin/pull/1802)
|
||||||
- [NEW] Supporting file binding [#1264](https://github.com/gin-gonic/gin/pull/1264)
|
- [NEW] Supporting file binding [#1264](https://git.internal/re/gin/pull/1264)
|
||||||
- [NEW] Add support for mapping arrays [#1797](https://github.com/gin-gonic/gin/pull/1797)
|
- [NEW] Add support for mapping arrays [#1797](https://git.internal/re/gin/pull/1797)
|
||||||
- [FIX] Readme updates [#1793](https://github.com/gin-gonic/gin/pull/1793) [#1788](https://github.com/gin-gonic/gin/pull/1788) [1789](https://github.com/gin-gonic/gin/pull/1789)
|
- [FIX] Readme updates [#1793](https://git.internal/re/gin/pull/1793) [#1788](https://git.internal/re/gin/pull/1788) [1789](https://git.internal/re/gin/pull/1789)
|
||||||
- [FIX] StaticFS: Fixed Logging two log lines on 404. [#1805](https://github.com/gin-gonic/gin/pull/1805), [#1804](https://github.com/gin-gonic/gin/pull/1804)
|
- [FIX] StaticFS: Fixed Logging two log lines on 404. [#1805](https://git.internal/re/gin/pull/1805), [#1804](https://git.internal/re/gin/pull/1804)
|
||||||
- [NEW] Make context.Keys available as LogFormatterParams [#1779](https://github.com/gin-gonic/gin/pull/1779)
|
- [NEW] Make context.Keys available as LogFormatterParams [#1779](https://git.internal/re/gin/pull/1779)
|
||||||
- [NEW] Use internal/json for Marshal/Unmarshal [#1791](https://github.com/gin-gonic/gin/pull/1791)
|
- [NEW] Use internal/json for Marshal/Unmarshal [#1791](https://git.internal/re/gin/pull/1791)
|
||||||
- [NEW] Support mapping time.Duration [#1794](https://github.com/gin-gonic/gin/pull/1794)
|
- [NEW] Support mapping time.Duration [#1794](https://git.internal/re/gin/pull/1794)
|
||||||
- [NEW] Refactor form mappings [#1749](https://github.com/gin-gonic/gin/pull/1749)
|
- [NEW] Refactor form mappings [#1749](https://git.internal/re/gin/pull/1749)
|
||||||
- [NEW] Added flag to context.Stream indicates if client disconnected in middle of stream [#1252](https://github.com/gin-gonic/gin/pull/1252)
|
- [NEW] Added flag to context.Stream indicates if client disconnected in middle of stream [#1252](https://git.internal/re/gin/pull/1252)
|
||||||
- [FIX] Moved [examples](https://github.com/gin-gonic/examples) to stand alone Repo [#1775](https://github.com/gin-gonic/gin/pull/1775)
|
- [FIX] Moved [examples](https://github.com/gin-gonic/examples) to stand alone Repo [#1775](https://git.internal/re/gin/pull/1775)
|
||||||
- [NEW] Extend context.File to allow for the content-disposition attachments via a new method context.Attachment [#1260](https://github.com/gin-gonic/gin/pull/1260)
|
- [NEW] Extend context.File to allow for the content-disposition attachments via a new method context.Attachment [#1260](https://git.internal/re/gin/pull/1260)
|
||||||
- [FIX] Support HTTP content negotiation wildcards [#1112](https://github.com/gin-gonic/gin/pull/1112)
|
- [FIX] Support HTTP content negotiation wildcards [#1112](https://git.internal/re/gin/pull/1112)
|
||||||
- [NEW] Add prefix from X-Forwarded-Prefix in redirectTrailingSlash [#1238](https://github.com/gin-gonic/gin/pull/1238)
|
- [NEW] Add prefix from X-Forwarded-Prefix in redirectTrailingSlash [#1238](https://git.internal/re/gin/pull/1238)
|
||||||
- [FIX] context.Copy() race condition [#1020](https://github.com/gin-gonic/gin/pull/1020)
|
- [FIX] context.Copy() race condition [#1020](https://git.internal/re/gin/pull/1020)
|
||||||
- [NEW] Add context.HandlerNames() [#1729](https://github.com/gin-gonic/gin/pull/1729)
|
- [NEW] Add context.HandlerNames() [#1729](https://git.internal/re/gin/pull/1729)
|
||||||
- [FIX] Change color methods to public in the defaultLogger. [#1771](https://github.com/gin-gonic/gin/pull/1771)
|
- [FIX] Change color methods to public in the defaultLogger. [#1771](https://git.internal/re/gin/pull/1771)
|
||||||
- [FIX] Update writeHeaders method to use http.Header.Set [#1722](https://github.com/gin-gonic/gin/pull/1722)
|
- [FIX] Update writeHeaders method to use http.Header.Set [#1722](https://git.internal/re/gin/pull/1722)
|
||||||
- [NEW] Add response size to LogFormatterParams [#1752](https://github.com/gin-gonic/gin/pull/1752)
|
- [NEW] Add response size to LogFormatterParams [#1752](https://git.internal/re/gin/pull/1752)
|
||||||
- [NEW] Allow ignoring field on form mapping [#1733](https://github.com/gin-gonic/gin/pull/1733)
|
- [NEW] Allow ignoring field on form mapping [#1733](https://git.internal/re/gin/pull/1733)
|
||||||
- [NEW] Add a function to force color in console output. [#1724](https://github.com/gin-gonic/gin/pull/1724)
|
- [NEW] Add a function to force color in console output. [#1724](https://git.internal/re/gin/pull/1724)
|
||||||
- [FIX] Context.Next() - recheck len of handlers on every iteration. [#1745](https://github.com/gin-gonic/gin/pull/1745)
|
- [FIX] Context.Next() - recheck len of handlers on every iteration. [#1745](https://git.internal/re/gin/pull/1745)
|
||||||
- [FIX] Fix all errcheck warnings [#1739](https://github.com/gin-gonic/gin/pull/1739) [#1653](https://github.com/gin-gonic/gin/pull/1653)
|
- [FIX] Fix all errcheck warnings [#1739](https://git.internal/re/gin/pull/1739) [#1653](https://git.internal/re/gin/pull/1653)
|
||||||
- [NEW] context: inherits context cancellation and deadline from http.Request context for Go>=1.7 [#1690](https://github.com/gin-gonic/gin/pull/1690)
|
- [NEW] context: inherits context cancellation and deadline from http.Request context for Go>=1.7 [#1690](https://git.internal/re/gin/pull/1690)
|
||||||
- [NEW] Binding for URL Params [#1694](https://github.com/gin-gonic/gin/pull/1694)
|
- [NEW] Binding for URL Params [#1694](https://git.internal/re/gin/pull/1694)
|
||||||
- [NEW] Add LoggerWithFormatter method [#1677](https://github.com/gin-gonic/gin/pull/1677)
|
- [NEW] Add LoggerWithFormatter method [#1677](https://git.internal/re/gin/pull/1677)
|
||||||
- [FIX] CI testing updates [#1671](https://github.com/gin-gonic/gin/pull/1671) [#1670](https://github.com/gin-gonic/gin/pull/1670) [#1682](https://github.com/gin-gonic/gin/pull/1682) [#1669](https://github.com/gin-gonic/gin/pull/1669)
|
- [FIX] CI testing updates [#1671](https://git.internal/re/gin/pull/1671) [#1670](https://git.internal/re/gin/pull/1670) [#1682](https://git.internal/re/gin/pull/1682) [#1669](https://git.internal/re/gin/pull/1669)
|
||||||
- [FIX] StaticFS(): Send 404 when path does not exist [#1663](https://github.com/gin-gonic/gin/pull/1663)
|
- [FIX] StaticFS(): Send 404 when path does not exist [#1663](https://git.internal/re/gin/pull/1663)
|
||||||
- [FIX] Handle nil body for JSON binding [#1638](https://github.com/gin-gonic/gin/pull/1638)
|
- [FIX] Handle nil body for JSON binding [#1638](https://git.internal/re/gin/pull/1638)
|
||||||
- [FIX] Support bind uri param [#1612](https://github.com/gin-gonic/gin/pull/1612)
|
- [FIX] Support bind uri param [#1612](https://git.internal/re/gin/pull/1612)
|
||||||
- [FIX] recovery: fix issue with syscall import on google app engine [#1640](https://github.com/gin-gonic/gin/pull/1640)
|
- [FIX] recovery: fix issue with syscall import on google app engine [#1640](https://git.internal/re/gin/pull/1640)
|
||||||
- [FIX] Make sure the debug log contains line breaks [#1650](https://github.com/gin-gonic/gin/pull/1650)
|
- [FIX] Make sure the debug log contains line breaks [#1650](https://git.internal/re/gin/pull/1650)
|
||||||
- [FIX] Panic stack trace being printed during recovery of broken pipe [#1089](https://github.com/gin-gonic/gin/pull/1089) [#1259](https://github.com/gin-gonic/gin/pull/1259)
|
- [FIX] Panic stack trace being printed during recovery of broken pipe [#1089](https://git.internal/re/gin/pull/1089) [#1259](https://git.internal/re/gin/pull/1259)
|
||||||
- [NEW] RunFd method to run http.Server through a file descriptor [#1609](https://github.com/gin-gonic/gin/pull/1609)
|
- [NEW] RunFd method to run http.Server through a file descriptor [#1609](https://git.internal/re/gin/pull/1609)
|
||||||
- [NEW] Yaml binding support [#1618](https://github.com/gin-gonic/gin/pull/1618)
|
- [NEW] Yaml binding support [#1618](https://git.internal/re/gin/pull/1618)
|
||||||
- [FIX] Pass MaxMultipartMemory when FormFile is called [#1600](https://github.com/gin-gonic/gin/pull/1600)
|
- [FIX] Pass MaxMultipartMemory when FormFile is called [#1600](https://git.internal/re/gin/pull/1600)
|
||||||
- [FIX] LoadHTML* tests [#1559](https://github.com/gin-gonic/gin/pull/1559)
|
- [FIX] LoadHTML* tests [#1559](https://git.internal/re/gin/pull/1559)
|
||||||
- [FIX] Removed use of sync.pool from HandleContext [#1565](https://github.com/gin-gonic/gin/pull/1565)
|
- [FIX] Removed use of sync.pool from HandleContext [#1565](https://git.internal/re/gin/pull/1565)
|
||||||
- [FIX] Format output log to os.Stderr [#1571](https://github.com/gin-gonic/gin/pull/1571)
|
- [FIX] Format output log to os.Stderr [#1571](https://git.internal/re/gin/pull/1571)
|
||||||
- [FIX] Make logger use a yellow background and a darkgray text for legibility [#1570](https://github.com/gin-gonic/gin/pull/1570)
|
- [FIX] Make logger use a yellow background and a darkgray text for legibility [#1570](https://git.internal/re/gin/pull/1570)
|
||||||
- [FIX] Remove sensitive request information from panic log. [#1370](https://github.com/gin-gonic/gin/pull/1370)
|
- [FIX] Remove sensitive request information from panic log. [#1370](https://git.internal/re/gin/pull/1370)
|
||||||
- [FIX] log.Println() does not print timestamp [#829](https://github.com/gin-gonic/gin/pull/829) [#1560](https://github.com/gin-gonic/gin/pull/1560)
|
- [FIX] log.Println() does not print timestamp [#829](https://git.internal/re/gin/pull/829) [#1560](https://git.internal/re/gin/pull/1560)
|
||||||
- [NEW] Add PureJSON renderer [#694](https://github.com/gin-gonic/gin/pull/694)
|
- [NEW] Add PureJSON renderer [#694](https://git.internal/re/gin/pull/694)
|
||||||
- [FIX] Add missing copyright and update if/else [#1497](https://github.com/gin-gonic/gin/pull/1497)
|
- [FIX] Add missing copyright and update if/else [#1497](https://git.internal/re/gin/pull/1497)
|
||||||
- [FIX] Update msgpack usage [#1498](https://github.com/gin-gonic/gin/pull/1498)
|
- [FIX] Update msgpack usage [#1498](https://git.internal/re/gin/pull/1498)
|
||||||
- [FIX] Use protobuf on render [#1496](https://github.com/gin-gonic/gin/pull/1496)
|
- [FIX] Use protobuf on render [#1496](https://git.internal/re/gin/pull/1496)
|
||||||
- [FIX] Add support for Protobuf format response [#1479](https://github.com/gin-gonic/gin/pull/1479)
|
- [FIX] Add support for Protobuf format response [#1479](https://git.internal/re/gin/pull/1479)
|
||||||
- [NEW] Set default time format in form binding [#1487](https://github.com/gin-gonic/gin/pull/1487)
|
- [NEW] Set default time format in form binding [#1487](https://git.internal/re/gin/pull/1487)
|
||||||
- [FIX] Add BindXML and ShouldBindXML [#1485](https://github.com/gin-gonic/gin/pull/1485)
|
- [FIX] Add BindXML and ShouldBindXML [#1485](https://git.internal/re/gin/pull/1485)
|
||||||
- [NEW] Upgrade dependency libraries [#1491](https://github.com/gin-gonic/gin/pull/1491)
|
- [NEW] Upgrade dependency libraries [#1491](https://git.internal/re/gin/pull/1491)
|
||||||
|
|
||||||
|
|
||||||
## Gin v1.3.0
|
## Gin v1.3.0
|
||||||
|
|
||||||
- [NEW] Add [`func (*Context) QueryMap`](https://godoc.org/github.com/gin-gonic/gin#Context.QueryMap), [`func (*Context) GetQueryMap`](https://godoc.org/github.com/gin-gonic/gin#Context.GetQueryMap), [`func (*Context) PostFormMap`](https://godoc.org/github.com/gin-gonic/gin#Context.PostFormMap) and [`func (*Context) GetPostFormMap`](https://godoc.org/github.com/gin-gonic/gin#Context.GetPostFormMap) to support `type map[string]string` as query string or form parameters, see [#1383](https://github.com/gin-gonic/gin/pull/1383)
|
- [NEW] Add [`func (*Context) QueryMap`](https://godoc.org/git.internal/re/gin#Context.QueryMap), [`func (*Context) GetQueryMap`](https://godoc.org/git.internal/re/gin#Context.GetQueryMap), [`func (*Context) PostFormMap`](https://godoc.org/git.internal/re/gin#Context.PostFormMap) and [`func (*Context) GetPostFormMap`](https://godoc.org/git.internal/re/gin#Context.GetPostFormMap) to support `type map[string]string` as query string or form parameters, see [#1383](https://git.internal/re/gin/pull/1383)
|
||||||
- [NEW] Add [`func (*Context) AsciiJSON`](https://godoc.org/github.com/gin-gonic/gin#Context.AsciiJSON), see [#1358](https://github.com/gin-gonic/gin/pull/1358)
|
- [NEW] Add [`func (*Context) AsciiJSON`](https://godoc.org/git.internal/re/gin#Context.AsciiJSON), see [#1358](https://git.internal/re/gin/pull/1358)
|
||||||
- [NEW] Add `Pusher()` in [`type ResponseWriter`](https://godoc.org/github.com/gin-gonic/gin#ResponseWriter) for supporting http2 push, see [#1273](https://github.com/gin-gonic/gin/pull/1273)
|
- [NEW] Add `Pusher()` in [`type ResponseWriter`](https://godoc.org/git.internal/re/gin#ResponseWriter) for supporting http2 push, see [#1273](https://git.internal/re/gin/pull/1273)
|
||||||
- [NEW] Add [`func (*Context) DataFromReader`](https://godoc.org/github.com/gin-gonic/gin#Context.DataFromReader) for serving dynamic data, see [#1304](https://github.com/gin-gonic/gin/pull/1304)
|
- [NEW] Add [`func (*Context) DataFromReader`](https://godoc.org/git.internal/re/gin#Context.DataFromReader) for serving dynamic data, see [#1304](https://git.internal/re/gin/pull/1304)
|
||||||
- [NEW] Add [`func (*Context) ShouldBindBodyWith`](https://godoc.org/github.com/gin-gonic/gin#Context.ShouldBindBodyWith) allowing to call binding multiple times, see [#1341](https://github.com/gin-gonic/gin/pull/1341)
|
- [NEW] Add [`func (*Context) ShouldBindBodyWith`](https://godoc.org/git.internal/re/gin#Context.ShouldBindBodyWith) allowing to call binding multiple times, see [#1341](https://git.internal/re/gin/pull/1341)
|
||||||
- [NEW] Support pointers in form binding, see [#1336](https://github.com/gin-gonic/gin/pull/1336)
|
- [NEW] Support pointers in form binding, see [#1336](https://git.internal/re/gin/pull/1336)
|
||||||
- [NEW] Add [`func (*Context) JSONP`](https://godoc.org/github.com/gin-gonic/gin#Context.JSONP), see [#1333](https://github.com/gin-gonic/gin/pull/1333)
|
- [NEW] Add [`func (*Context) JSONP`](https://godoc.org/git.internal/re/gin#Context.JSONP), see [#1333](https://git.internal/re/gin/pull/1333)
|
||||||
- [NEW] Support default value in form binding, see [#1138](https://github.com/gin-gonic/gin/pull/1138)
|
- [NEW] Support default value in form binding, see [#1138](https://git.internal/re/gin/pull/1138)
|
||||||
- [NEW] Expose validator engine in [`type StructValidator`](https://godoc.org/github.com/gin-gonic/gin/binding#StructValidator), see [#1277](https://github.com/gin-gonic/gin/pull/1277)
|
- [NEW] Expose validator engine in [`type StructValidator`](https://godoc.org/git.internal/re/gin/binding#StructValidator), see [#1277](https://git.internal/re/gin/pull/1277)
|
||||||
- [NEW] Add [`func (*Context) ShouldBind`](https://godoc.org/github.com/gin-gonic/gin#Context.ShouldBind), [`func (*Context) ShouldBindQuery`](https://godoc.org/github.com/gin-gonic/gin#Context.ShouldBindQuery) and [`func (*Context) ShouldBindJSON`](https://godoc.org/github.com/gin-gonic/gin#Context.ShouldBindJSON), see [#1047](https://github.com/gin-gonic/gin/pull/1047)
|
- [NEW] Add [`func (*Context) ShouldBind`](https://godoc.org/git.internal/re/gin#Context.ShouldBind), [`func (*Context) ShouldBindQuery`](https://godoc.org/git.internal/re/gin#Context.ShouldBindQuery) and [`func (*Context) ShouldBindJSON`](https://godoc.org/git.internal/re/gin#Context.ShouldBindJSON), see [#1047](https://git.internal/re/gin/pull/1047)
|
||||||
- [NEW] Add support for `time.Time` location in form binding, see [#1117](https://github.com/gin-gonic/gin/pull/1117)
|
- [NEW] Add support for `time.Time` location in form binding, see [#1117](https://git.internal/re/gin/pull/1117)
|
||||||
- [NEW] Add [`func (*Context) BindQuery`](https://godoc.org/github.com/gin-gonic/gin#Context.BindQuery), see [#1029](https://github.com/gin-gonic/gin/pull/1029)
|
- [NEW] Add [`func (*Context) BindQuery`](https://godoc.org/git.internal/re/gin#Context.BindQuery), see [#1029](https://git.internal/re/gin/pull/1029)
|
||||||
- [NEW] Make [jsonite](https://github.com/json-iterator/go) optional with build tags, see [#1026](https://github.com/gin-gonic/gin/pull/1026)
|
- [NEW] Make [jsonite](https://github.com/json-iterator/go) optional with build tags, see [#1026](https://git.internal/re/gin/pull/1026)
|
||||||
- [NEW] Show query string in logger, see [#999](https://github.com/gin-gonic/gin/pull/999)
|
- [NEW] Show query string in logger, see [#999](https://git.internal/re/gin/pull/999)
|
||||||
- [NEW] Add [`func (*Context) SecureJSON`](https://godoc.org/github.com/gin-gonic/gin#Context.SecureJSON), see [#987](https://github.com/gin-gonic/gin/pull/987) and [#993](https://github.com/gin-gonic/gin/pull/993)
|
- [NEW] Add [`func (*Context) SecureJSON`](https://godoc.org/git.internal/re/gin#Context.SecureJSON), see [#987](https://git.internal/re/gin/pull/987) and [#993](https://git.internal/re/gin/pull/993)
|
||||||
- [DEPRECATE] `func (*Context) GetCookie` for [`func (*Context) Cookie`](https://godoc.org/github.com/gin-gonic/gin#Context.Cookie)
|
- [DEPRECATE] `func (*Context) GetCookie` for [`func (*Context) Cookie`](https://godoc.org/git.internal/re/gin#Context.Cookie)
|
||||||
- [FIX] Don't display color tags if [`func DisableConsoleColor`](https://godoc.org/github.com/gin-gonic/gin#DisableConsoleColor) called, see [#1072](https://github.com/gin-gonic/gin/pull/1072)
|
- [FIX] Don't display color tags if [`func DisableConsoleColor`](https://godoc.org/git.internal/re/gin#DisableConsoleColor) called, see [#1072](https://git.internal/re/gin/pull/1072)
|
||||||
- [FIX] Gin Mode `""` when calling [`func Mode`](https://godoc.org/github.com/gin-gonic/gin#Mode) now returns `const DebugMode`, see [#1250](https://github.com/gin-gonic/gin/pull/1250)
|
- [FIX] Gin Mode `""` when calling [`func Mode`](https://godoc.org/git.internal/re/gin#Mode) now returns `const DebugMode`, see [#1250](https://git.internal/re/gin/pull/1250)
|
||||||
- [FIX] `Flush()` now doesn't overwrite `responseWriter` status code, see [#1460](https://github.com/gin-gonic/gin/pull/1460)
|
- [FIX] `Flush()` now doesn't overwrite `responseWriter` status code, see [#1460](https://git.internal/re/gin/pull/1460)
|
||||||
|
|
||||||
## Gin 1.2.0
|
## Gin 1.2.0
|
||||||
|
|
||||||
|
|
80
README.md
80
README.md
|
@ -2,15 +2,15 @@
|
||||||
|
|
||||||
<img align="right" width="159px" src="https://raw.githubusercontent.com/gin-gonic/logo/master/color.png">
|
<img align="right" width="159px" src="https://raw.githubusercontent.com/gin-gonic/logo/master/color.png">
|
||||||
|
|
||||||
[![Build Status](https://github.com/gin-gonic/gin/workflows/Run%20Tests/badge.svg?branch=master)](https://github.com/gin-gonic/gin/actions?query=branch%3Amaster)
|
[![Build Status](https://git.internal/re/gin/workflows/Run%20Tests/badge.svg?branch=master)](https://git.internal/re/gin/actions?query=branch%3Amaster)
|
||||||
[![codecov](https://codecov.io/gh/gin-gonic/gin/branch/master/graph/badge.svg)](https://codecov.io/gh/gin-gonic/gin)
|
[![codecov](https://codecov.io/gh/gin-gonic/gin/branch/master/graph/badge.svg)](https://codecov.io/gh/gin-gonic/gin)
|
||||||
[![Go Report Card](https://goreportcard.com/badge/github.com/gin-gonic/gin)](https://goreportcard.com/report/github.com/gin-gonic/gin)
|
[![Go Report Card](https://goreportcard.com/badge/git.internal/re/gin)](https://goreportcard.com/report/git.internal/re/gin)
|
||||||
[![GoDoc](https://pkg.go.dev/badge/github.com/gin-gonic/gin?status.svg)](https://pkg.go.dev/github.com/gin-gonic/gin?tab=doc)
|
[![GoDoc](https://pkg.go.dev/badge/git.internal/re/gin?status.svg)](https://pkg.go.dev/git.internal/re/gin?tab=doc)
|
||||||
[![Join the chat at https://gitter.im/gin-gonic/gin](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/gin-gonic/gin?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
[![Join the chat at https://gitter.im/gin-gonic/gin](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/gin-gonic/gin?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
[![Sourcegraph](https://sourcegraph.com/github.com/gin-gonic/gin/-/badge.svg)](https://sourcegraph.com/github.com/gin-gonic/gin?badge)
|
[![Sourcegraph](https://sourcegraph.com/git.internal/re/gin/-/badge.svg)](https://sourcegraph.com/git.internal/re/gin?badge)
|
||||||
[![Open Source Helpers](https://www.codetriage.com/gin-gonic/gin/badges/users.svg)](https://www.codetriage.com/gin-gonic/gin)
|
[![Open Source Helpers](https://www.codetriage.com/gin-gonic/gin/badges/users.svg)](https://www.codetriage.com/gin-gonic/gin)
|
||||||
[![Release](https://img.shields.io/github/release/gin-gonic/gin.svg?style=flat-square)](https://github.com/gin-gonic/gin/releases)
|
[![Release](https://img.shields.io/github/release/gin-gonic/gin.svg?style=flat-square)](https://git.internal/re/gin/releases)
|
||||||
[![TODOs](https://badgen.net/https/api.tickgit.com/badgen/github.com/gin-gonic/gin)](https://www.tickgit.com/browse?repo=github.com/gin-gonic/gin)
|
[![TODOs](https://badgen.net/https/api.tickgit.com/badgen/git.internal/re/gin)](https://www.tickgit.com/browse?repo=git.internal/re/gin)
|
||||||
|
|
||||||
Gin is a web framework written in Go (Golang). It features a martini-like API with performance that is up to 40 times faster thanks to [httprouter](https://github.com/julienschmidt/httprouter). If you need performance and good productivity, you will love Gin.
|
Gin is a web framework written in Go (Golang). It features a martini-like API with performance that is up to 40 times faster thanks to [httprouter](https://github.com/julienschmidt/httprouter). If you need performance and good productivity, you will love Gin.
|
||||||
|
|
||||||
|
@ -90,13 +90,13 @@ To install Gin package, you need to install Go and set your Go workspace first.
|
||||||
1. You first need [Go](https://go.dev/) installed (**version 1.16+ is required**), then you can use the below Go command to install Gin.
|
1. You first need [Go](https://go.dev/) installed (**version 1.16+ is required**), then you can use the below Go command to install Gin.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
go get -u github.com/gin-gonic/gin
|
go get -u git.internal/re/gin
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Import it in your code:
|
2. Import it in your code:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import "github.com/gin-gonic/gin"
|
import "git.internal/re/gin"
|
||||||
```
|
```
|
||||||
|
|
||||||
3. (Optional) Import `net/http`. This is required for example if using constants such as `http.StatusOK`.
|
3. (Optional) Import `net/http`. This is required for example if using constants such as `http.StatusOK`.
|
||||||
|
@ -118,7 +118,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -219,7 +219,7 @@ Gin enables `MsgPack` rendering feature by default. But you can disable this fea
|
||||||
go build -tags=nomsgpack .
|
go build -tags=nomsgpack .
|
||||||
```
|
```
|
||||||
|
|
||||||
This is useful to reduce the binary size of executable files. See the [detail information](https://github.com/gin-gonic/gin/pull/1852).
|
This is useful to reduce the binary size of executable files. See the [detail information](https://git.internal/re/gin/pull/1852).
|
||||||
|
|
||||||
## API Examples
|
## API Examples
|
||||||
|
|
||||||
|
@ -386,9 +386,9 @@ ids: map[b:hello a:1234]; names: map[second:tianou first:thinkerou]
|
||||||
|
|
||||||
#### Single file
|
#### Single file
|
||||||
|
|
||||||
References issue [#774](https://github.com/gin-gonic/gin/issues/774) and detail [example code](https://github.com/gin-gonic/examples/tree/master/upload-file/single).
|
References issue [#774](https://git.internal/re/gin/issues/774) and detail [example code](https://github.com/gin-gonic/examples/tree/master/upload-file/single).
|
||||||
|
|
||||||
`file.Filename` **SHOULD NOT** be trusted. See [`Content-Disposition` on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#Directives) and [#1693](https://github.com/gin-gonic/gin/issues/1693)
|
`file.Filename` **SHOULD NOT** be trusted. See [`Content-Disposition` on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#Directives) and [#1693](https://git.internal/re/gin/issues/1693)
|
||||||
|
|
||||||
> The filename is always optional and must not be used blindly by the application: path information should be stripped, and conversion to the server file system rules should be done.
|
> The filename is always optional and must not be used blindly by the application: path information should be stripped, and conversion to the server file system rules should be done.
|
||||||
|
|
||||||
|
@ -800,8 +800,8 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
"github.com/gin-gonic/gin/binding"
|
"git.internal/re/gin/binding"
|
||||||
"github.com/go-playground/validator/v10"
|
"github.com/go-playground/validator/v10"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -859,7 +859,7 @@ See the [struct-lvl-validation example](https://github.com/gin-gonic/examples/tr
|
||||||
|
|
||||||
### Only Bind Query String
|
### Only Bind Query String
|
||||||
|
|
||||||
`ShouldBindQuery` function only binds the query params and not the post data. See the [detail information](https://github.com/gin-gonic/gin/issues/742#issuecomment-315953017).
|
`ShouldBindQuery` function only binds the query params and not the post data. See the [detail information](https://git.internal/re/gin/issues/742#issuecomment-315953017).
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
@ -868,7 +868,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Person struct {
|
type Person struct {
|
||||||
|
@ -896,7 +896,7 @@ func startPage(c *gin.Context) {
|
||||||
|
|
||||||
### Bind Query String or Post Data
|
### Bind Query String or Post Data
|
||||||
|
|
||||||
See the [detail information](https://github.com/gin-gonic/gin/issues/742#issuecomment-264681292).
|
See the [detail information](https://git.internal/re/gin/issues/742#issuecomment-264681292).
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
@ -906,7 +906,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Person struct {
|
type Person struct {
|
||||||
|
@ -927,7 +927,7 @@ func startPage(c *gin.Context) {
|
||||||
var person Person
|
var person Person
|
||||||
// If `GET`, only `Form` binding engine (`query`) used.
|
// If `GET`, only `Form` binding engine (`query`) used.
|
||||||
// If `POST`, first checks the `content-type` for `JSON` or `XML`, then uses `Form` (`form-data`).
|
// If `POST`, first checks the `content-type` for `JSON` or `XML`, then uses `Form` (`form-data`).
|
||||||
// See more at https://github.com/gin-gonic/gin/blob/master/binding/binding.go#L88
|
// See more at https://git.internal/re/gin/blob/master/binding/binding.go#L88
|
||||||
if c.ShouldBind(&person) == nil {
|
if c.ShouldBind(&person) == nil {
|
||||||
log.Println(person.Name)
|
log.Println(person.Name)
|
||||||
log.Println(person.Address)
|
log.Println(person.Address)
|
||||||
|
@ -948,7 +948,7 @@ curl -X GET "localhost:8085/testing?name=appleboy&address=xyz&birthday=1992-03-1
|
||||||
|
|
||||||
### Bind Uri
|
### Bind Uri
|
||||||
|
|
||||||
See the [detail information](https://github.com/gin-gonic/gin/issues/846).
|
See the [detail information](https://git.internal/re/gin/issues/846).
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
@ -956,7 +956,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Person struct {
|
type Person struct {
|
||||||
|
@ -994,7 +994,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
type testHeader struct {
|
type testHeader struct {
|
||||||
|
@ -1026,7 +1026,7 @@ func main() {
|
||||||
|
|
||||||
### Bind HTML checkboxes
|
### Bind HTML checkboxes
|
||||||
|
|
||||||
See the [detail information](https://github.com/gin-gonic/gin/issues/129#issuecomment-124260092)
|
See the [detail information](https://git.internal/re/gin/issues/129#issuecomment-124260092)
|
||||||
|
|
||||||
main.go
|
main.go
|
||||||
|
|
||||||
|
@ -1440,7 +1440,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func formatAsDate(t time.Time) string {
|
func formatAsDate(t time.Time) string {
|
||||||
|
@ -1493,7 +1493,7 @@ r.GET("/test", func(c *gin.Context) {
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
Issuing a HTTP redirect from POST. Refer to issue: [#444](https://github.com/gin-gonic/gin/issues/444)
|
Issuing a HTTP redirect from POST. Refer to issue: [#444](https://git.internal/re/gin/issues/444)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
r.POST("/test", func(c *gin.Context) {
|
r.POST("/test", func(c *gin.Context) {
|
||||||
|
@ -1665,7 +1665,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/autotls"
|
"github.com/gin-gonic/autotls"
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -1690,7 +1690,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/autotls"
|
"github.com/gin-gonic/autotls"
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
"golang.org/x/crypto/acme/autocert"
|
"golang.org/x/crypto/acme/autocert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1714,7 +1714,7 @@ func main() {
|
||||||
|
|
||||||
### Run multiple service using Gin
|
### Run multiple service using Gin
|
||||||
|
|
||||||
See the [question](https://github.com/gin-gonic/gin/issues/346) and try the following example:
|
See the [question](https://git.internal/re/gin/issues/346) and try the following example:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
@ -1724,7 +1724,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1807,7 +1807,7 @@ There are a few approaches you can use to perform a graceful shutdown or restart
|
||||||
|
|
||||||
#### Third-party packages
|
#### Third-party packages
|
||||||
|
|
||||||
We can use [fvbock/endless](https://github.com/fvbock/endless) to replace the default `ListenAndServe`. Refer to issue [#296](https://github.com/gin-gonic/gin/issues/296) for more details.
|
We can use [fvbock/endless](https://github.com/fvbock/endless) to replace the default `ListenAndServe`. Refer to issue [#296](https://git.internal/re/gin/issues/296) for more details.
|
||||||
|
|
||||||
```go
|
```go
|
||||||
router := gin.Default()
|
router := gin.Default()
|
||||||
|
@ -1840,7 +1840,7 @@ import (
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -1898,7 +1898,7 @@ import (
|
||||||
"html/template"
|
"html/template"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed assets/* templates/*
|
//go:embed assets/* templates/*
|
||||||
|
@ -2069,7 +2069,7 @@ enough to call binding at once.
|
||||||
2. This feature is only needed for some formats -- `JSON`, `XML`, `MsgPack`,
|
2. This feature is only needed for some formats -- `JSON`, `XML`, `MsgPack`,
|
||||||
`ProtoBuf`. For other formats, `Query`, `Form`, `FormPost`, `FormMultipart`,
|
`ProtoBuf`. For other formats, `Query`, `Form`, `FormPost`, `FormMultipart`,
|
||||||
can be called by `c.ShouldBind()` multiple times without any damage to
|
can be called by `c.ShouldBind()` multiple times without any damage to
|
||||||
performance (See [#1341](https://github.com/gin-gonic/gin/pull/1341)).
|
performance (See [#1341](https://git.internal/re/gin/pull/1341)).
|
||||||
|
|
||||||
### Bind form-data request with custom struct and custom tag
|
### Bind form-data request with custom struct and custom tag
|
||||||
|
|
||||||
|
@ -2138,7 +2138,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
var html = template.Must(template.New("https").Parse(`
|
var html = template.Must(template.New("https").Parse(`
|
||||||
|
@ -2193,7 +2193,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -2225,7 +2225,7 @@ func main() {
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -2269,7 +2269,7 @@ unnecessary computation.
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -2296,7 +2296,7 @@ Look at the example below:
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -2327,7 +2327,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupRouter() *gin.Engine {
|
func setupRouter() *gin.Engine {
|
||||||
|
@ -2371,7 +2371,7 @@ func TestPingRoute(t *testing.T) {
|
||||||
|
|
||||||
## Users
|
## Users
|
||||||
|
|
||||||
Awesome project lists using [Gin](https://github.com/gin-gonic/gin) web framework.
|
Awesome project lists using [Gin](https://git.internal/re/gin) web framework.
|
||||||
|
|
||||||
* [gorush](https://github.com/appleboy/gorush): A push notification server written in Go.
|
* [gorush](https://github.com/appleboy/gorush): A push notification server written in Go.
|
||||||
* [fnproject](https://github.com/fnproject/fn): The container native, cloud agnostic serverless platform.
|
* [fnproject](https://github.com/fnproject/fn): The container native, cloud agnostic serverless platform.
|
||||||
|
|
2
auth.go
2
auth.go
|
@ -10,7 +10,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/internal/bytesconv"
|
"git.internal/re/gin/internal/bytesconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AuthUserKey is the cookie name for user credential in basic auth.
|
// AuthUserKey is the cookie name for user credential in basic auth.
|
||||||
|
|
|
@ -18,7 +18,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/testdata/protoexample"
|
"git.internal/re/gin/testdata/protoexample"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
|
@ -12,8 +12,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/internal/bytesconv"
|
"git.internal/re/gin/internal/bytesconv"
|
||||||
"github.com/gin-gonic/gin/internal/json"
|
"git.internal/re/gin/internal/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/internal/json"
|
"git.internal/re/gin/internal/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
// EnableDecoderUseNumber is used to call the UseNumber method on the JSON
|
// EnableDecoderUseNumber is used to call the UseNumber method on the JSON
|
||||||
|
|
|
@ -19,9 +19,9 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.internal/re/gin/binding"
|
||||||
|
"git.internal/re/gin/render"
|
||||||
"github.com/gin-contrib/sse"
|
"github.com/gin-contrib/sse"
|
||||||
"github.com/gin-gonic/gin/binding"
|
|
||||||
"github.com/gin-gonic/gin/render"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Content-Type MIME of the most common data formats.
|
// Content-Type MIME of the most common data formats.
|
||||||
|
@ -603,7 +603,7 @@ func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string) error
|
||||||
}
|
}
|
||||||
defer src.Close()
|
defer src.Close()
|
||||||
|
|
||||||
if err = os.MkdirAll(filepath.Dir(dst), 0750); err != nil {
|
if err = os.MkdirAll(filepath.Dir(dst), 0o750); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,9 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.internal/re/gin/binding"
|
||||||
|
testdata "git.internal/re/gin/testdata/protoexample"
|
||||||
"github.com/gin-contrib/sse"
|
"github.com/gin-contrib/sse"
|
||||||
"github.com/gin-gonic/gin/binding"
|
|
||||||
testdata "github.com/gin-gonic/gin/testdata/protoexample"
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
@ -340,7 +340,7 @@ func TestContextHandlerName(t *testing.T) {
|
||||||
c, _ := CreateTestContext(httptest.NewRecorder())
|
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||||
c.handlers = HandlersChain{func(c *Context) {}, handlerNameTest}
|
c.handlers = HandlersChain{func(c *Context) {}, handlerNameTest}
|
||||||
|
|
||||||
assert.Regexp(t, "^(.*/vendor/)?github.com/gin-gonic/gin.handlerNameTest$", c.HandlerName())
|
assert.Regexp(t, "^(.*/vendor/)?git.internal/re/gin.handlerNameTest$", c.HandlerName())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContextHandlerNames(t *testing.T) {
|
func TestContextHandlerNames(t *testing.T) {
|
||||||
|
|
|
@ -62,7 +62,7 @@ func TestDebugPrintRoutes(t *testing.T) {
|
||||||
debugPrintRoute("GET", "/path/to/route/:param", HandlersChain{func(c *Context) {}, handlerNameTest})
|
debugPrintRoute("GET", "/path/to/route/:param", HandlersChain{func(c *Context) {}, handlerNameTest})
|
||||||
SetMode(TestMode)
|
SetMode(TestMode)
|
||||||
})
|
})
|
||||||
assert.Regexp(t, `^\[GIN-debug\] GET /path/to/route/:param --> (.*/vendor/)?github.com/gin-gonic/gin.handlerNameTest \(2 handlers\)\n$`, re)
|
assert.Regexp(t, `^\[GIN-debug\] GET /path/to/route/:param --> (.*/vendor/)?git.internal/re/gin.handlerNameTest \(2 handlers\)\n$`, re)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDebugPrintRouteFunc(t *testing.T) {
|
func TestDebugPrintRouteFunc(t *testing.T) {
|
||||||
|
@ -74,7 +74,7 @@ func TestDebugPrintRouteFunc(t *testing.T) {
|
||||||
debugPrintRoute("GET", "/path/to/route/:param1/:param2", HandlersChain{func(c *Context) {}, handlerNameTest})
|
debugPrintRoute("GET", "/path/to/route/:param1/:param2", HandlersChain{func(c *Context) {}, handlerNameTest})
|
||||||
SetMode(TestMode)
|
SetMode(TestMode)
|
||||||
})
|
})
|
||||||
assert.Regexp(t, `^\[GIN-debug\] GET /path/to/route/:param1/:param2 --> (.*/vendor/)?github.com/gin-gonic/gin.handlerNameTest \(2 handlers\)\n$`, re)
|
assert.Regexp(t, `^\[GIN-debug\] GET /path/to/route/:param1/:param2 --> (.*/vendor/)?git.internal/re/gin.handlerNameTest \(2 handlers\)\n$`, re)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDebugPrintLoadTemplate(t *testing.T) {
|
func TestDebugPrintLoadTemplate(t *testing.T) {
|
||||||
|
|
|
@ -7,7 +7,7 @@ package gin
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/binding"
|
"git.internal/re/gin/binding"
|
||||||
)
|
)
|
||||||
|
|
||||||
// BindWith binds the passed struct pointer using the specified binding engine.
|
// BindWith binds the passed struct pointer using the specified binding engine.
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/binding"
|
"git.internal/re/gin/binding"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
2
doc.go
2
doc.go
|
@ -3,4 +3,4 @@ Package gin implements a HTTP web framework called gin.
|
||||||
|
|
||||||
See https://gin-gonic.com/ for more information about gin.
|
See https://gin-gonic.com/ for more information about gin.
|
||||||
*/
|
*/
|
||||||
package gin // import "github.com/gin-gonic/gin"
|
package gin // import "git.internal/re/gin"
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/internal/json"
|
"git.internal/re/gin/internal/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ErrorType is an unsigned 64-bit error code as defined in the gin spec.
|
// ErrorType is an unsigned 64-bit error code as defined in the gin spec.
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/internal/json"
|
"git.internal/re/gin/internal/json"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
14
gin.go
14
gin.go
|
@ -14,8 +14,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/internal/bytesconv"
|
"git.internal/re/gin/internal/bytesconv"
|
||||||
"github.com/gin-gonic/gin/render"
|
"git.internal/re/gin/render"
|
||||||
"golang.org/x/net/http2"
|
"golang.org/x/net/http2"
|
||||||
"golang.org/x/net/http2/h2c"
|
"golang.org/x/net/http2/h2c"
|
||||||
)
|
)
|
||||||
|
@ -374,7 +374,7 @@ func (engine *Engine) Run(addr ...string) (err error) {
|
||||||
|
|
||||||
if engine.isUnsafeTrustedProxies() {
|
if engine.isUnsafeTrustedProxies() {
|
||||||
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
|
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
|
||||||
"Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.")
|
"Please check https://pkg.go.dev/git.internal/re/gin#readme-don-t-trust-all-proxies for details.")
|
||||||
}
|
}
|
||||||
|
|
||||||
address := resolveAddress(addr)
|
address := resolveAddress(addr)
|
||||||
|
@ -495,7 +495,7 @@ func (engine *Engine) RunTLS(addr, certFile, keyFile string) (err error) {
|
||||||
|
|
||||||
if engine.isUnsafeTrustedProxies() {
|
if engine.isUnsafeTrustedProxies() {
|
||||||
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
|
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
|
||||||
"Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.")
|
"Please check https://pkg.go.dev/git.internal/re/gin#readme-don-t-trust-all-proxies for details.")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = http.ListenAndServeTLS(addr, certFile, keyFile, engine.Handler())
|
err = http.ListenAndServeTLS(addr, certFile, keyFile, engine.Handler())
|
||||||
|
@ -511,7 +511,7 @@ func (engine *Engine) RunUnix(file string) (err error) {
|
||||||
|
|
||||||
if engine.isUnsafeTrustedProxies() {
|
if engine.isUnsafeTrustedProxies() {
|
||||||
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
|
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
|
||||||
"Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.")
|
"Please check https://pkg.go.dev/git.internal/re/gin#readme-don-t-trust-all-proxies for details.")
|
||||||
}
|
}
|
||||||
|
|
||||||
listener, err := net.Listen("unix", file)
|
listener, err := net.Listen("unix", file)
|
||||||
|
@ -534,7 +534,7 @@ func (engine *Engine) RunFd(fd int) (err error) {
|
||||||
|
|
||||||
if engine.isUnsafeTrustedProxies() {
|
if engine.isUnsafeTrustedProxies() {
|
||||||
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
|
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
|
||||||
"Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.")
|
"Please check https://pkg.go.dev/git.internal/re/gin#readme-don-t-trust-all-proxies for details.")
|
||||||
}
|
}
|
||||||
|
|
||||||
f := os.NewFile(uintptr(fd), fmt.Sprintf("fd@%d", fd))
|
f := os.NewFile(uintptr(fd), fmt.Sprintf("fd@%d", fd))
|
||||||
|
@ -555,7 +555,7 @@ func (engine *Engine) RunListener(listener net.Listener) (err error) {
|
||||||
|
|
||||||
if engine.isUnsafeTrustedProxies() {
|
if engine.isUnsafeTrustedProxies() {
|
||||||
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
|
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
|
||||||
"Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.")
|
"Please check https://pkg.go.dev/git.internal/re/gin#readme-don-t-trust-all-proxies for details.")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = http.Serve(listener, engine.Handler())
|
err = http.Serve(listener, engine.Handler())
|
||||||
|
|
|
@ -6,8 +6,8 @@ This is API experiment for Gin.
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
"github.com/gin-gonic/gin/ginS"
|
"git.internal/re/gin/ginS"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
|
@ -9,11 +9,13 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"git.internal/re/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
var once sync.Once
|
var (
|
||||||
var internalEngine *gin.Engine
|
once sync.Once
|
||||||
|
internalEngine *gin.Engine
|
||||||
|
)
|
||||||
|
|
||||||
func engine() *gin.Engine {
|
func engine() *gin.Engine {
|
||||||
once.Do(func() {
|
once.Do(func() {
|
||||||
|
|
12
gin_test.go
12
gin_test.go
|
@ -44,7 +44,7 @@ func setupHTMLFiles(t *testing.T, mode string, tls bool, loadMethod func(*Engine
|
||||||
})
|
})
|
||||||
router.GET("/raw", func(c *Context) {
|
router.GET("/raw", func(c *Context) {
|
||||||
c.HTML(http.StatusOK, "raw.tmpl", map[string]any{
|
c.HTML(http.StatusOK, "raw.tmpl", map[string]any{
|
||||||
"now": time.Date(2017, 07, 01, 0, 0, 0, 0, time.UTC),
|
"now": time.Date(2017, 0o7, 0o1, 0, 0, 0, 0, time.UTC),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -493,27 +493,27 @@ func TestListOfRoutes(t *testing.T) {
|
||||||
assertRoutePresent(t, list, RouteInfo{
|
assertRoutePresent(t, list, RouteInfo{
|
||||||
Method: "GET",
|
Method: "GET",
|
||||||
Path: "/favicon.ico",
|
Path: "/favicon.ico",
|
||||||
Handler: "^(.*/vendor/)?github.com/gin-gonic/gin.handlerTest1$",
|
Handler: "^(.*/vendor/)?git.internal/re/gin.handlerTest1$",
|
||||||
})
|
})
|
||||||
assertRoutePresent(t, list, RouteInfo{
|
assertRoutePresent(t, list, RouteInfo{
|
||||||
Method: "GET",
|
Method: "GET",
|
||||||
Path: "/",
|
Path: "/",
|
||||||
Handler: "^(.*/vendor/)?github.com/gin-gonic/gin.handlerTest1$",
|
Handler: "^(.*/vendor/)?git.internal/re/gin.handlerTest1$",
|
||||||
})
|
})
|
||||||
assertRoutePresent(t, list, RouteInfo{
|
assertRoutePresent(t, list, RouteInfo{
|
||||||
Method: "GET",
|
Method: "GET",
|
||||||
Path: "/users/",
|
Path: "/users/",
|
||||||
Handler: "^(.*/vendor/)?github.com/gin-gonic/gin.handlerTest2$",
|
Handler: "^(.*/vendor/)?git.internal/re/gin.handlerTest2$",
|
||||||
})
|
})
|
||||||
assertRoutePresent(t, list, RouteInfo{
|
assertRoutePresent(t, list, RouteInfo{
|
||||||
Method: "GET",
|
Method: "GET",
|
||||||
Path: "/users/:id",
|
Path: "/users/:id",
|
||||||
Handler: "^(.*/vendor/)?github.com/gin-gonic/gin.handlerTest1$",
|
Handler: "^(.*/vendor/)?git.internal/re/gin.handlerTest1$",
|
||||||
})
|
})
|
||||||
assertRoutePresent(t, list, RouteInfo{
|
assertRoutePresent(t, list, RouteInfo{
|
||||||
Method: "POST",
|
Method: "POST",
|
||||||
Path: "/users/:id",
|
Path: "/users/:id",
|
||||||
Handler: "^(.*/vendor/)?github.com/gin-gonic/gin.handlerTest2$",
|
Handler: "^(.*/vendor/)?git.internal/re/gin.handlerTest2$",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -1,4 +1,4 @@
|
||||||
module github.com/gin-gonic/gin
|
module git.internal/re/gin
|
||||||
|
|
||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
|
|
2
mode.go
2
mode.go
|
@ -9,7 +9,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/binding"
|
"git.internal/re/gin/binding"
|
||||||
)
|
)
|
||||||
|
|
||||||
// EnvGinMode indicates environment name for gin mode.
|
// EnvGinMode indicates environment name for gin mode.
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/binding"
|
"git.internal/re/gin/binding"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ import (
|
||||||
"html/template"
|
"html/template"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/internal/bytesconv"
|
"git.internal/re/gin/internal/bytesconv"
|
||||||
"github.com/gin-gonic/gin/internal/json"
|
"git.internal/re/gin/internal/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
// JSON contains the given interface object.
|
// JSON contains the given interface object.
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Check interface implemented here to support go build tag nomsgpack.
|
// Check interface implemented here to support go build tag nomsgpack.
|
||||||
// See: https://github.com/gin-gonic/gin/pull/1852/
|
// See: https://git.internal/re/gin/pull/1852/
|
||||||
var (
|
var (
|
||||||
_ Render = MsgPack{}
|
_ Render = MsgPack{}
|
||||||
)
|
)
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
testdata "github.com/gin-gonic/gin/testdata/protoexample"
|
testdata "git.internal/re/gin/testdata/protoexample"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/internal/bytesconv"
|
"git.internal/re/gin/internal/bytesconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
// String contains the given interface object slice and its format.
|
// String contains the given interface object slice and its format.
|
||||||
|
|
2
tree.go
2
tree.go
|
@ -11,7 +11,7 @@ import (
|
||||||
"unicode"
|
"unicode"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin/internal/bytesconv"
|
"git.internal/re/gin/internal/bytesconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -229,7 +229,7 @@ func TestTreeWildcard(t *testing.T) {
|
||||||
{"/a", false, "/:cc", Params{Param{Key: "cc", Value: "a"}}},
|
{"/a", false, "/:cc", Params{Param{Key: "cc", Value: "a"}}},
|
||||||
// * Error with argument being intercepted
|
// * Error with argument being intercepted
|
||||||
// new PR handle (/all /all/cc /a/cc)
|
// new PR handle (/all /all/cc /a/cc)
|
||||||
// fix PR: https://github.com/gin-gonic/gin/pull/2796
|
// fix PR: https://git.internal/re/gin/pull/2796
|
||||||
{"/all", false, "/:cc", Params{Param{Key: "cc", Value: "all"}}},
|
{"/all", false, "/:cc", Params{Param{Key: "cc", Value: "all"}}},
|
||||||
{"/d", false, "/:cc", Params{Param{Key: "cc", Value: "d"}}},
|
{"/d", false, "/:cc", Params{Param{Key: "cc", Value: "d"}}},
|
||||||
{"/ad", false, "/:cc", Params{Param{Key: "cc", Value: "ad"}}},
|
{"/ad", false, "/:cc", Params{Param{Key: "cc", Value: "ad"}}},
|
||||||
|
@ -474,7 +474,7 @@ func TestTreeDuplicatePath(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//printChildren(tree, "")
|
// printChildren(tree, "")
|
||||||
|
|
||||||
checkRequests(t, tree, testRequests{
|
checkRequests(t, tree, testRequests{
|
||||||
{"/", false, "/", nil},
|
{"/", false, "/", nil},
|
||||||
|
@ -525,7 +525,7 @@ func TestTreeCatchAllConflictRoot(t *testing.T) {
|
||||||
|
|
||||||
func TestTreeCatchMaxParams(t *testing.T) {
|
func TestTreeCatchMaxParams(t *testing.T) {
|
||||||
tree := &node{}
|
tree := &node{}
|
||||||
var route = "/cmd/*filepath"
|
route := "/cmd/*filepath"
|
||||||
tree.addRoute(route, fakeHandler(route))
|
tree.addRoute(route, fakeHandler(route))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -685,7 +685,7 @@ func TestTreeRootTrailingSlashRedirect(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRedirectTrailingSlash(t *testing.T) {
|
func TestRedirectTrailingSlash(t *testing.T) {
|
||||||
var data = []struct {
|
data := []struct {
|
||||||
path string
|
path string
|
||||||
}{
|
}{
|
||||||
{"/hello/:name"},
|
{"/hello/:name"},
|
||||||
|
|
|
@ -86,7 +86,7 @@ func TestFilterFlags(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFunctionName(t *testing.T) {
|
func TestFunctionName(t *testing.T) {
|
||||||
assert.Regexp(t, `^(.*/vendor/)?github.com/gin-gonic/gin.somefunction$`, nameOfFunction(somefunction))
|
assert.Regexp(t, `^(.*/vendor/)?git.internal/re/gin.somefunction$`, nameOfFunction(somefunction))
|
||||||
}
|
}
|
||||||
|
|
||||||
func somefunction() {
|
func somefunction() {
|
||||||
|
|
Loading…
Reference in New Issue