CHANGELOG.md (35839B)
1 # Gin ChangeLog 2 3 ## Gin v1.9.1 4 5 ### BUG FIXES 6 7 * fix Request.Context() checks [#3512](https://github.com/gin-gonic/gin/pull/3512) 8 9 ### SECURITY 10 11 * fix lack of escaping of filename in Content-Disposition [#3556](https://github.com/gin-gonic/gin/pull/3556) 12 13 ### ENHANCEMENTS 14 15 * refactor: use bytes.ReplaceAll directly [#3455](https://github.com/gin-gonic/gin/pull/3455) 16 * convert strings and slices using the officially recommended way [#3344](https://github.com/gin-gonic/gin/pull/3344) 17 * improve render code coverage [#3525](https://github.com/gin-gonic/gin/pull/3525) 18 19 ### DOCS 20 21 * docs: changed documentation link for trusted proxies [#3575](https://github.com/gin-gonic/gin/pull/3575) 22 * chore: improve linting, testing, and GitHub Actions setup [#3583](https://github.com/gin-gonic/gin/pull/3583) 23 24 ## Gin v1.9.0 25 26 ### BREAK CHANGES 27 28 * Stop useless panicking in context and render [#2150](https://github.com/gin-gonic/gin/pull/2150) 29 30 ### BUG FIXES 31 32 * fix(router): tree bug where loop index is not decremented. [#3460](https://github.com/gin-gonic/gin/pull/3460) 33 * fix(context): panic on NegotiateFormat - index out of range [#3397](https://github.com/gin-gonic/gin/pull/3397) 34 * Add escape logic for header [#3500](https://github.com/gin-gonic/gin/pull/3500) and [#3503](https://github.com/gin-gonic/gin/pull/3503) 35 36 ### SECURITY 37 38 * Fix the GO-2022-0969 and GO-2022-0288 vulnerabilities [#3333](https://github.com/gin-gonic/gin/pull/3333) 39 * fix(security): vulnerability GO-2023-1571 [#3505](https://github.com/gin-gonic/gin/pull/3505) 40 41 ### ENHANCEMENTS 42 43 * feat: add sonic json support [#3184](https://github.com/gin-gonic/gin/pull/3184) 44 * chore(file): Creates a directory named path [#3316](https://github.com/gin-gonic/gin/pull/3316) 45 * fix: modify interface check way [#3327](https://github.com/gin-gonic/gin/pull/3327) 46 * remove deprecated of package io/ioutil [#3395](https://github.com/gin-gonic/gin/pull/3395) 47 * refactor: avoid calling strings.ToLower twice [#3343](https://github.com/gin-gonic/gin/pull/3433) 48 * console logger HTTP status code bug fixed [#3453](https://github.com/gin-gonic/gin/pull/3453) 49 * chore(yaml): upgrade dependency to v3 version [#3456](https://github.com/gin-gonic/gin/pull/3456) 50 * chore(router): match method added to routergroup for multiple HTTP methods supporting [#3464](https://github.com/gin-gonic/gin/pull/3464) 51 * chore(http): add support for go1.20 http.rwUnwrapper to gin.responseWriter [#3489](https://github.com/gin-gonic/gin/pull/3489) 52 53 ### DOCS 54 55 * docs: update markdown format [#3260](https://github.com/gin-gonic/gin/pull/3260) 56 * docs(readme): Add the TOML rendering example [#3400](https://github.com/gin-gonic/gin/pull/3400) 57 * docs(readme): move more example to docs/doc.md [#3449](https://github.com/gin-gonic/gin/pull/3449) 58 * docs: update markdown format [#3446](https://github.com/gin-gonic/gin/pull/3446) 59 60 ## Gin v1.8.2 61 62 ### BUG FIXES 63 64 * fix(route): redirectSlash bug ([#3227]((https://github.com/gin-gonic/gin/pull/3227))) 65 * fix(engine): missing route params for CreateTestContext ([#2778]((https://github.com/gin-gonic/gin/pull/2778))) ([#2803]((https://github.com/gin-gonic/gin/pull/2803))) 66 67 ### SECURITY 68 69 * Fix the GO-2022-1144 vulnerability ([#3432]((https://github.com/gin-gonic/gin/pull/3432))) 70 71 ## Gin v1.8.1 72 73 ### ENHANCEMENTS 74 75 * feat(context): add ContextWithFallback feature flag [#3172](https://github.com/gin-gonic/gin/pull/3172) 76 77 ## Gin v1.8.0 78 79 ### BREAK CHANGES 80 81 * 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` 82 * gin.Context with fallback value from gin.Context.Request.Context() [#2751](https://github.com/gin-gonic/gin/pull/2751) 83 84 ### BUG FIXES 85 86 * Fixed SetOutput() panics on go 1.17 [#2861](https://github.com/gin-gonic/gin/pull/2861) 87 * Fix: wrong when wildcard follows named param [#2983](https://github.com/gin-gonic/gin/pull/2983) 88 * Fix: missing sameSite when do context.reset() [#3123](https://github.com/gin-gonic/gin/pull/3123) 89 90 ### ENHANCEMENTS 91 92 * Use Header() instead of deprecated HeaderMap [#2694](https://github.com/gin-gonic/gin/pull/2694) 93 * RouterGroup.Handle regular match optimization of http method [#2685](https://github.com/gin-gonic/gin/pull/2685) 94 * Add support go-json, another drop-in json replacement [#2680](https://github.com/gin-gonic/gin/pull/2680) 95 * Use errors.New to replace fmt.Errorf will much better [#2707](https://github.com/gin-gonic/gin/pull/2707) 96 * Use Duration.Truncate for truncating precision [#2711](https://github.com/gin-gonic/gin/pull/2711) 97 * Get client IP when using Cloudflare [#2723](https://github.com/gin-gonic/gin/pull/2723) 98 * Optimize code adjust [#2700](https://github.com/gin-gonic/gin/pull/2700/files) 99 * Optimize code and reduce code cyclomatic complexity [#2737](https://github.com/gin-gonic/gin/pull/2737) 100 * Improve sliceValidateError.Error performance [#2765](https://github.com/gin-gonic/gin/pull/2765) 101 * Support custom struct tag [#2720](https://github.com/gin-gonic/gin/pull/2720) 102 * Improve router group tests [#2787](https://github.com/gin-gonic/gin/pull/2787) 103 * Fallback Context.Deadline() Context.Done() Context.Err() to Context.Request.Context() [#2769](https://github.com/gin-gonic/gin/pull/2769) 104 * 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) 105 * TrustedProxies: Add default IPv6 support and refactor [#2967](https://github.com/gin-gonic/gin/pull/2967) 106 * Test(route): expose performRequest func [#3012](https://github.com/gin-gonic/gin/pull/3012) 107 * Support h2c with prior knowledge [#1398](https://github.com/gin-gonic/gin/pull/1398) 108 * Feat attachment filename support utf8 [#3071](https://github.com/gin-gonic/gin/pull/3071) 109 * Feat: add StaticFileFS [#2749](https://github.com/gin-gonic/gin/pull/2749) 110 * Feat(context): return GIN Context from Value method [#2825](https://github.com/gin-gonic/gin/pull/2825) 111 * Feat: automatically SetMode to TestMode when run go test [#3139](https://github.com/gin-gonic/gin/pull/3139) 112 * Add TOML bining for gin [#3081](https://github.com/gin-gonic/gin/pull/3081) 113 * IPv6 add default trusted proxies [#3033](https://github.com/gin-gonic/gin/pull/3033) 114 115 ### DOCS 116 117 * Add note about nomsgpack tag to the readme [#2703](https://github.com/gin-gonic/gin/pull/2703) 118 119 ## Gin v1.7.7 120 121 ### BUG FIXES 122 123 * 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). 124 * 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). 125 * 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). 126 * 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). 127 128 ### ENHANCEMENTS 129 130 * 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). 131 * TrustedPlatform: provide custom options for another CDN services [#2906](https://github.com/gin-gonic/gin/pull/2906). 132 133 ### DOCS 134 135 * NoMethod: added usage annotation ([#2832](https://github.com/gin-gonic/gin/pull/2832#issuecomment-929954463)). 136 137 ## Gin v1.7.6 138 139 ### BUG FIXES 140 141 * bump new release to fix v1.7.5 release error by using v1.7.4 codes. 142 143 ## Gin v1.7.4 144 145 ### BUG FIXES 146 147 * bump new release to fix checksum mismatch 148 149 ## Gin v1.7.3 150 151 ### BUG FIXES 152 153 * fix level 1 router match [#2767](https://github.com/gin-gonic/gin/issues/2767), [#2796](https://github.com/gin-gonic/gin/issues/2796) 154 155 ## Gin v1.7.2 156 157 ### BUG FIXES 158 159 * 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). 160 161 ## Gin v1.7.1 162 163 ### BUG FIXES 164 165 * fix: data race with trustedCIDRs from [#2674](https://github.com/gin-gonic/gin/issues/2674)([#2675](https://github.com/gin-gonic/gin/pull/2675)) 166 167 ## Gin v1.7.0 168 169 ### BUG FIXES 170 171 * fix compile error from [#2572](https://github.com/gin-gonic/gin/pull/2572) ([#2600](https://github.com/gin-gonic/gin/pull/2600)) 172 * fix: print headers without Authorization header on broken pipe ([#2528](https://github.com/gin-gonic/gin/pull/2528)) 173 * fix(tree): reassign fullpath when register new node ([#2366](https://github.com/gin-gonic/gin/pull/2366)) 174 175 ### ENHANCEMENTS 176 177 * Support params and exact routes without creating conflicts ([#2663](https://github.com/gin-gonic/gin/pull/2663)) 178 * chore: improve render string performance ([#2365](https://github.com/gin-gonic/gin/pull/2365)) 179 * Sync route tree to httprouter latest code ([#2368](https://github.com/gin-gonic/gin/pull/2368)) 180 * chore: rename getQueryCache/getFormCache to initQueryCache/initFormCa ([#2375](https://github.com/gin-gonic/gin/pull/2375)) 181 * chore(performance): improve countParams ([#2378](https://github.com/gin-gonic/gin/pull/2378)) 182 * Remove some functions that have the same effect as the bytes package ([#2387](https://github.com/gin-gonic/gin/pull/2387)) 183 * update:SetMode function ([#2321](https://github.com/gin-gonic/gin/pull/2321)) 184 * remove an unused type SecureJSONPrefix ([#2391](https://github.com/gin-gonic/gin/pull/2391)) 185 * Add a redirect sample for POST method ([#2389](https://github.com/gin-gonic/gin/pull/2389)) 186 * Add CustomRecovery builtin middleware ([#2322](https://github.com/gin-gonic/gin/pull/2322)) 187 * binding: avoid 2038 problem on 32-bit architectures ([#2450](https://github.com/gin-gonic/gin/pull/2450)) 188 * Prevent panic in Context.GetQuery() when there is no Request ([#2412](https://github.com/gin-gonic/gin/pull/2412)) 189 * Add GetUint and GetUint64 method on gin.context ([#2487](https://github.com/gin-gonic/gin/pull/2487)) 190 * update content-disposition header to MIME-style ([#2512](https://github.com/gin-gonic/gin/pull/2512)) 191 * reduce allocs and improve the render `WriteString` ([#2508](https://github.com/gin-gonic/gin/pull/2508)) 192 * implement ".Unwrap() error" on Error type ([#2525](https://github.com/gin-gonic/gin/pull/2525)) ([#2526](https://github.com/gin-gonic/gin/pull/2526)) 193 * Allow bind with a map[string]string ([#2484](https://github.com/gin-gonic/gin/pull/2484)) 194 * chore: update tree ([#2371](https://github.com/gin-gonic/gin/pull/2371)) 195 * Support binding for slice/array obj [Rewrite] ([#2302](https://github.com/gin-gonic/gin/pull/2302)) 196 * basic auth: fix timing oracle ([#2609](https://github.com/gin-gonic/gin/pull/2609)) 197 * 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)) 198 * feat(engine): add trustedproxies and remoteIP ([#2632](https://github.com/gin-gonic/gin/pull/2632)) 199 200 ## Gin v1.6.3 201 202 ### ENHANCEMENTS 203 204 * Improve performance: Change `*sync.RWMutex` to `sync.RWMutex` in context. [#2351](https://github.com/gin-gonic/gin/pull/2351) 205 206 ## Gin v1.6.2 207 208 ### BUG FIXES 209 210 * fix missing initial sync.RWMutex [#2305](https://github.com/gin-gonic/gin/pull/2305) 211 212 ### ENHANCEMENTS 213 214 * Add set samesite in cookie. [#2306](https://github.com/gin-gonic/gin/pull/2306) 215 216 ## Gin v1.6.1 217 218 ### BUG FIXES 219 220 * Revert "fix accept incoming network connections" [#2294](https://github.com/gin-gonic/gin/pull/2294) 221 222 ## Gin v1.6.0 223 224 ### BREAKING 225 226 * chore(performance): Improve performance for adding RemoveExtraSlash flag [#2159](https://github.com/gin-gonic/gin/pull/2159) 227 * drop support govendor [#2148](https://github.com/gin-gonic/gin/pull/2148) 228 * Added support for SameSite cookie flag [#1615](https://github.com/gin-gonic/gin/pull/1615) 229 230 ### FEATURES 231 232 * add yaml negotiation [#2220](https://github.com/gin-gonic/gin/pull/2220) 233 * FileFromFS [#2112](https://github.com/gin-gonic/gin/pull/2112) 234 235 ### BUG FIXES 236 237 * Unix Socket Handling [#2280](https://github.com/gin-gonic/gin/pull/2280) 238 * Use json marshall in context json to fix breaking new line issue. Fixes #2209 [#2228](https://github.com/gin-gonic/gin/pull/2228) 239 * fix accept incoming network connections [#2216](https://github.com/gin-gonic/gin/pull/2216) 240 * Fixed a bug in the calculation of the maximum number of parameters [#2166](https://github.com/gin-gonic/gin/pull/2166) 241 * [FIX] allow empty headers on DataFromReader [#2121](https://github.com/gin-gonic/gin/pull/2121) 242 * Add mutex for protect Context.Keys map [#1391](https://github.com/gin-gonic/gin/pull/1391) 243 244 ### ENHANCEMENTS 245 246 * Add mitigation for log injection [#2277](https://github.com/gin-gonic/gin/pull/2277) 247 * tree: range over nodes values [#2229](https://github.com/gin-gonic/gin/pull/2229) 248 * tree: remove duplicate assignment [#2222](https://github.com/gin-gonic/gin/pull/2222) 249 * chore: upgrade go-isatty and json-iterator/go [#2215](https://github.com/gin-gonic/gin/pull/2215) 250 * path: sync code with httprouter [#2212](https://github.com/gin-gonic/gin/pull/2212) 251 * Use zero-copy approach to convert types between string and byte slice [#2206](https://github.com/gin-gonic/gin/pull/2206) 252 * Reuse bytes when cleaning the URL paths [#2179](https://github.com/gin-gonic/gin/pull/2179) 253 * tree: remove one else statement [#2177](https://github.com/gin-gonic/gin/pull/2177) 254 * tree: sync httprouter update (#2173) (#2172) [#2171](https://github.com/gin-gonic/gin/pull/2171) 255 * tree: sync part httprouter codes and reduce if/else [#2163](https://github.com/gin-gonic/gin/pull/2163) 256 * use http method constant [#2155](https://github.com/gin-gonic/gin/pull/2155) 257 * upgrade go-validator to v10 [#2149](https://github.com/gin-gonic/gin/pull/2149) 258 * Refactor redirect request in gin.go [#1970](https://github.com/gin-gonic/gin/pull/1970) 259 * Add build tag nomsgpack [#1852](https://github.com/gin-gonic/gin/pull/1852) 260 261 ### DOCS 262 263 * docs(path): improve comments [#2223](https://github.com/gin-gonic/gin/pull/2223) 264 * Renew README to fit the modification of SetCookie method [#2217](https://github.com/gin-gonic/gin/pull/2217) 265 * Fix spelling [#2202](https://github.com/gin-gonic/gin/pull/2202) 266 * Remove broken link from README. [#2198](https://github.com/gin-gonic/gin/pull/2198) 267 * Update docs on Context.Done(), Context.Deadline() and Context.Err() [#2196](https://github.com/gin-gonic/gin/pull/2196) 268 * Update validator to v10 [#2190](https://github.com/gin-gonic/gin/pull/2190) 269 * upgrade go-validator to v10 for README [#2189](https://github.com/gin-gonic/gin/pull/2189) 270 * Update to currently output [#2188](https://github.com/gin-gonic/gin/pull/2188) 271 * Fix "Custom Validators" example [#2186](https://github.com/gin-gonic/gin/pull/2186) 272 * Add project to README [#2165](https://github.com/gin-gonic/gin/pull/2165) 273 * docs(benchmarks): for gin v1.5 [#2153](https://github.com/gin-gonic/gin/pull/2153) 274 * Changed wording for clarity in README.md [#2122](https://github.com/gin-gonic/gin/pull/2122) 275 276 ### MISC 277 278 * ci support go1.14 [#2262](https://github.com/gin-gonic/gin/pull/2262) 279 * chore: upgrade depend version [#2231](https://github.com/gin-gonic/gin/pull/2231) 280 * Drop support go1.10 [#2147](https://github.com/gin-gonic/gin/pull/2147) 281 * fix comment in `mode.go` [#2129](https://github.com/gin-gonic/gin/pull/2129) 282 283 ## Gin v1.5.0 284 285 - [FIX] Use DefaultWriter and DefaultErrorWriter for debug messages [#1891](https://github.com/gin-gonic/gin/pull/1891) 286 - [NEW] Now you can parse the inline lowercase start structure [#1893](https://github.com/gin-gonic/gin/pull/1893) 287 - [FIX] Some code improvements [#1909](https://github.com/gin-gonic/gin/pull/1909) 288 - [FIX] Use encode replace json marshal increase json encoder speed [#1546](https://github.com/gin-gonic/gin/pull/1546) 289 - [NEW] Hold matched route full path in the Context [#1826](https://github.com/gin-gonic/gin/pull/1826) 290 - [FIX] Fix context.Params race condition on Copy() [#1841](https://github.com/gin-gonic/gin/pull/1841) 291 - [NEW] Add context param query cache [#1450](https://github.com/gin-gonic/gin/pull/1450) 292 - [FIX] Improve GetQueryMap performance [#1918](https://github.com/gin-gonic/gin/pull/1918) 293 - [FIX] Improve get post data [#1920](https://github.com/gin-gonic/gin/pull/1920) 294 - [FIX] Use context instead of x/net/context [#1922](https://github.com/gin-gonic/gin/pull/1922) 295 - [FIX] Attempt to fix PostForm cache bug [#1931](https://github.com/gin-gonic/gin/pull/1931) 296 - [NEW] Add support of multipart multi files [#1949](https://github.com/gin-gonic/gin/pull/1949) 297 - [NEW] Support bind http header param [#1957](https://github.com/gin-gonic/gin/pull/1957) 298 - [FIX] Drop support for go1.8 and go1.9 [#1933](https://github.com/gin-gonic/gin/pull/1933) 299 - [FIX] Bugfix for the FullPath feature [#1919](https://github.com/gin-gonic/gin/pull/1919) 300 - [FIX] Gin1.5 bytes.Buffer to strings.Builder [#1939](https://github.com/gin-gonic/gin/pull/1939) 301 - [FIX] Upgrade github.com/ugorji/go/codec [#1969](https://github.com/gin-gonic/gin/pull/1969) 302 - [NEW] Support bind unix time [#1980](https://github.com/gin-gonic/gin/pull/1980) 303 - [FIX] Simplify code [#2004](https://github.com/gin-gonic/gin/pull/2004) 304 - [NEW] Support negative Content-Length in DataFromReader [#1981](https://github.com/gin-gonic/gin/pull/1981) 305 - [FIX] Identify terminal on a RISC-V architecture for auto-colored logs [#2019](https://github.com/gin-gonic/gin/pull/2019) 306 - [BREAKING] `Context.JSONP()` now expects a semicolon (`;`) at the end [#2007](https://github.com/gin-gonic/gin/pull/2007) 307 - [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) 308 - [NEW] Add `DisallowUnknownFields()` in `Context.BindJSON()` [#2028](https://github.com/gin-gonic/gin/pull/2028) 309 - [NEW] Use specific `net.Listener` with `Engine.RunListener()` [#2023](https://github.com/gin-gonic/gin/pull/2023) 310 - [FIX] Fix some typo [#2079](https://github.com/gin-gonic/gin/pull/2079) [#2080](https://github.com/gin-gonic/gin/pull/2080) 311 - [FIX] Relocate binding body tests [#2086](https://github.com/gin-gonic/gin/pull/2086) 312 - [FIX] Use Writer in Context.Status [#1606](https://github.com/gin-gonic/gin/pull/1606) 313 - [FIX] `Engine.RunUnix()` now returns the error if it can't change the file mode [#2093](https://github.com/gin-gonic/gin/pull/2093) 314 - [FIX] `RouterGroup.StaticFS()` leaked files. Now it closes them. [#2118](https://github.com/gin-gonic/gin/pull/2118) 315 - [FIX] `Context.Request.FormFile` leaked file. Now it closes it. [#2114](https://github.com/gin-gonic/gin/pull/2114) 316 - [FIX] Ignore walking on `form:"-"` mapping [#1943](https://github.com/gin-gonic/gin/pull/1943) 317 318 ### Gin v1.4.0 319 320 - [NEW] Support for [Go Modules](https://github.com/golang/go/wiki/Modules) [#1569](https://github.com/gin-gonic/gin/pull/1569) 321 - [NEW] Refactor of form mapping multipart request [#1829](https://github.com/gin-gonic/gin/pull/1829) 322 - [FIX] Truncate Latency precision in long running request [#1830](https://github.com/gin-gonic/gin/pull/1830) 323 - [FIX] IsTerm flag should not be affected by DisableConsoleColor method. [#1802](https://github.com/gin-gonic/gin/pull/1802) 324 - [NEW] Supporting file binding [#1264](https://github.com/gin-gonic/gin/pull/1264) 325 - [NEW] Add support for mapping arrays [#1797](https://github.com/gin-gonic/gin/pull/1797) 326 - [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) 327 - [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) 328 - [NEW] Make context.Keys available as LogFormatterParams [#1779](https://github.com/gin-gonic/gin/pull/1779) 329 - [NEW] Use internal/json for Marshal/Unmarshal [#1791](https://github.com/gin-gonic/gin/pull/1791) 330 - [NEW] Support mapping time.Duration [#1794](https://github.com/gin-gonic/gin/pull/1794) 331 - [NEW] Refactor form mappings [#1749](https://github.com/gin-gonic/gin/pull/1749) 332 - [NEW] Added flag to context.Stream indicates if client disconnected in middle of stream [#1252](https://github.com/gin-gonic/gin/pull/1252) 333 - [FIX] Moved [examples](https://github.com/gin-gonic/examples) to stand alone Repo [#1775](https://github.com/gin-gonic/gin/pull/1775) 334 - [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) 335 - [FIX] Support HTTP content negotiation wildcards [#1112](https://github.com/gin-gonic/gin/pull/1112) 336 - [NEW] Add prefix from X-Forwarded-Prefix in redirectTrailingSlash [#1238](https://github.com/gin-gonic/gin/pull/1238) 337 - [FIX] context.Copy() race condition [#1020](https://github.com/gin-gonic/gin/pull/1020) 338 - [NEW] Add context.HandlerNames() [#1729](https://github.com/gin-gonic/gin/pull/1729) 339 - [FIX] Change color methods to public in the defaultLogger. [#1771](https://github.com/gin-gonic/gin/pull/1771) 340 - [FIX] Update writeHeaders method to use http.Header.Set [#1722](https://github.com/gin-gonic/gin/pull/1722) 341 - [NEW] Add response size to LogFormatterParams [#1752](https://github.com/gin-gonic/gin/pull/1752) 342 - [NEW] Allow ignoring field on form mapping [#1733](https://github.com/gin-gonic/gin/pull/1733) 343 - [NEW] Add a function to force color in console output. [#1724](https://github.com/gin-gonic/gin/pull/1724) 344 - [FIX] Context.Next() - recheck len of handlers on every iteration. [#1745](https://github.com/gin-gonic/gin/pull/1745) 345 - [FIX] Fix all errcheck warnings [#1739](https://github.com/gin-gonic/gin/pull/1739) [#1653](https://github.com/gin-gonic/gin/pull/1653) 346 - [NEW] context: inherits context cancellation and deadline from http.Request context for Go>=1.7 [#1690](https://github.com/gin-gonic/gin/pull/1690) 347 - [NEW] Binding for URL Params [#1694](https://github.com/gin-gonic/gin/pull/1694) 348 - [NEW] Add LoggerWithFormatter method [#1677](https://github.com/gin-gonic/gin/pull/1677) 349 - [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) 350 - [FIX] StaticFS(): Send 404 when path does not exist [#1663](https://github.com/gin-gonic/gin/pull/1663) 351 - [FIX] Handle nil body for JSON binding [#1638](https://github.com/gin-gonic/gin/pull/1638) 352 - [FIX] Support bind uri param [#1612](https://github.com/gin-gonic/gin/pull/1612) 353 - [FIX] recovery: fix issue with syscall import on google app engine [#1640](https://github.com/gin-gonic/gin/pull/1640) 354 - [FIX] Make sure the debug log contains line breaks [#1650](https://github.com/gin-gonic/gin/pull/1650) 355 - [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) 356 - [NEW] RunFd method to run http.Server through a file descriptor [#1609](https://github.com/gin-gonic/gin/pull/1609) 357 - [NEW] Yaml binding support [#1618](https://github.com/gin-gonic/gin/pull/1618) 358 - [FIX] Pass MaxMultipartMemory when FormFile is called [#1600](https://github.com/gin-gonic/gin/pull/1600) 359 - [FIX] LoadHTML* tests [#1559](https://github.com/gin-gonic/gin/pull/1559) 360 - [FIX] Removed use of sync.pool from HandleContext [#1565](https://github.com/gin-gonic/gin/pull/1565) 361 - [FIX] Format output log to os.Stderr [#1571](https://github.com/gin-gonic/gin/pull/1571) 362 - [FIX] Make logger use a yellow background and a darkgray text for legibility [#1570](https://github.com/gin-gonic/gin/pull/1570) 363 - [FIX] Remove sensitive request information from panic log. [#1370](https://github.com/gin-gonic/gin/pull/1370) 364 - [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) 365 - [NEW] Add PureJSON renderer [#694](https://github.com/gin-gonic/gin/pull/694) 366 - [FIX] Add missing copyright and update if/else [#1497](https://github.com/gin-gonic/gin/pull/1497) 367 - [FIX] Update msgpack usage [#1498](https://github.com/gin-gonic/gin/pull/1498) 368 - [FIX] Use protobuf on render [#1496](https://github.com/gin-gonic/gin/pull/1496) 369 - [FIX] Add support for Protobuf format response [#1479](https://github.com/gin-gonic/gin/pull/1479) 370 - [NEW] Set default time format in form binding [#1487](https://github.com/gin-gonic/gin/pull/1487) 371 - [FIX] Add BindXML and ShouldBindXML [#1485](https://github.com/gin-gonic/gin/pull/1485) 372 - [NEW] Upgrade dependency libraries [#1491](https://github.com/gin-gonic/gin/pull/1491) 373 374 375 ## Gin v1.3.0 376 377 - [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) 378 - [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) 379 - [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) 380 - [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) 381 - [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) 382 - [NEW] Support pointers in form binding, see [#1336](https://github.com/gin-gonic/gin/pull/1336) 383 - [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) 384 - [NEW] Support default value in form binding, see [#1138](https://github.com/gin-gonic/gin/pull/1138) 385 - [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) 386 - [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) 387 - [NEW] Add support for `time.Time` location in form binding, see [#1117](https://github.com/gin-gonic/gin/pull/1117) 388 - [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) 389 - [NEW] Make [jsonite](https://github.com/json-iterator/go) optional with build tags, see [#1026](https://github.com/gin-gonic/gin/pull/1026) 390 - [NEW] Show query string in logger, see [#999](https://github.com/gin-gonic/gin/pull/999) 391 - [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) 392 - [DEPRECATE] `func (*Context) GetCookie` for [`func (*Context) Cookie`](https://godoc.org/github.com/gin-gonic/gin#Context.Cookie) 393 - [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) 394 - [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) 395 - [FIX] `Flush()` now doesn't overwrite `responseWriter` status code, see [#1460](https://github.com/gin-gonic/gin/pull/1460) 396 397 ## Gin 1.2.0 398 399 - [NEW] Switch from godeps to govendor 400 - [NEW] Add support for Let's Encrypt via gin-gonic/autotls 401 - [NEW] Improve README examples and add extra at examples folder 402 - [NEW] Improved support with App Engine 403 - [NEW] Add custom template delimiters, see #860 404 - [NEW] Add Template Func Maps, see #962 405 - [NEW] Add \*context.Handler(), see #928 406 - [NEW] Add \*context.GetRawData() 407 - [NEW] Add \*context.GetHeader() (request) 408 - [NEW] Add \*context.AbortWithStatusJSON() (JSON content type) 409 - [NEW] Add \*context.Keys type cast helpers 410 - [NEW] Add \*context.ShouldBindWith() 411 - [NEW] Add \*context.MustBindWith() 412 - [NEW] Add \*engine.SetFuncMap() 413 - [DEPRECATE] On next release: \*context.BindWith(), see #855 414 - [FIX] Refactor render 415 - [FIX] Reworked tests 416 - [FIX] logger now supports cygwin 417 - [FIX] Use X-Forwarded-For before X-Real-Ip 418 - [FIX] time.Time binding (#904) 419 420 ## Gin 1.1.4 421 422 - [NEW] Support google appengine for IsTerminal func 423 424 ## Gin 1.1.3 425 426 - [FIX] Reverted Logger: skip ANSI color commands 427 428 ## Gin 1.1 429 430 - [NEW] Implement QueryArray and PostArray methods 431 - [NEW] Refactor GetQuery and GetPostForm 432 - [NEW] Add contribution guide 433 - [FIX] Corrected typos in README 434 - [FIX] Removed additional Iota 435 - [FIX] Changed imports to gopkg instead of github in README (#733) 436 - [FIX] Logger: skip ANSI color commands if output is not a tty 437 438 ## Gin 1.0rc2 (...) 439 440 - [PERFORMANCE] Fast path for writing Content-Type. 441 - [PERFORMANCE] Much faster 404 routing 442 - [PERFORMANCE] Allocation optimizations 443 - [PERFORMANCE] Faster root tree lookup 444 - [PERFORMANCE] Zero overhead, String() and JSON() rendering. 445 - [PERFORMANCE] Faster ClientIP parsing 446 - [PERFORMANCE] Much faster SSE implementation 447 - [NEW] Benchmarks suite 448 - [NEW] Bind validation can be disabled and replaced with custom validators. 449 - [NEW] More flexible HTML render 450 - [NEW] Multipart and PostForm bindings 451 - [NEW] Adds method to return all the registered routes 452 - [NEW] Context.HandlerName() returns the main handler's name 453 - [NEW] Adds Error.IsType() helper 454 - [FIX] Binding multipart form 455 - [FIX] Integration tests 456 - [FIX] Crash when binding non struct object in Context. 457 - [FIX] RunTLS() implementation 458 - [FIX] Logger() unit tests 459 - [FIX] Adds SetHTMLTemplate() warning 460 - [FIX] Context.IsAborted() 461 - [FIX] More unit tests 462 - [FIX] JSON, XML, HTML renders accept custom content-types 463 - [FIX] gin.AbortIndex is unexported 464 - [FIX] Better approach to avoid directory listing in StaticFS() 465 - [FIX] Context.ClientIP() always returns the IP with trimmed spaces. 466 - [FIX] Better warning when running in debug mode. 467 - [FIX] Google App Engine integration. debugPrint does not use os.Stdout 468 - [FIX] Fixes integer overflow in error type 469 - [FIX] Error implements the json.Marshaller interface 470 - [FIX] MIT license in every file 471 472 473 ## Gin 1.0rc1 (May 22, 2015) 474 475 - [PERFORMANCE] Zero allocation router 476 - [PERFORMANCE] Faster JSON, XML and text rendering 477 - [PERFORMANCE] Custom hand optimized HttpRouter for Gin 478 - [PERFORMANCE] Misc code optimizations. Inlining, tail call optimizations 479 - [NEW] Built-in support for golang.org/x/net/context 480 - [NEW] Any(path, handler). Create a route that matches any path 481 - [NEW] Refactored rendering pipeline (faster and static typed) 482 - [NEW] Refactored errors API 483 - [NEW] IndentedJSON() prints pretty JSON 484 - [NEW] Added gin.DefaultWriter 485 - [NEW] UNIX socket support 486 - [NEW] RouterGroup.BasePath is exposed 487 - [NEW] JSON validation using go-validate-yourself (very powerful options) 488 - [NEW] Completed suite of unit tests 489 - [NEW] HTTP streaming with c.Stream() 490 - [NEW] StaticFile() creates a router for serving just one file. 491 - [NEW] StaticFS() has an option to disable directory listing. 492 - [NEW] StaticFS() for serving static files through virtual filesystems 493 - [NEW] Server-Sent Events native support 494 - [NEW] WrapF() and WrapH() helpers for wrapping http.HandlerFunc and http.Handler 495 - [NEW] Added LoggerWithWriter() middleware 496 - [NEW] Added RecoveryWithWriter() middleware 497 - [NEW] Added DefaultPostFormValue() 498 - [NEW] Added DefaultFormValue() 499 - [NEW] Added DefaultParamValue() 500 - [FIX] BasicAuth() when using custom realm 501 - [FIX] Bug when serving static files in nested routing group 502 - [FIX] Redirect using built-in http.Redirect() 503 - [FIX] Logger when printing the requested path 504 - [FIX] Documentation typos 505 - [FIX] Context.Engine renamed to Context.engine 506 - [FIX] Better debugging messages 507 - [FIX] ErrorLogger 508 - [FIX] Debug HTTP render 509 - [FIX] Refactored binding and render modules 510 - [FIX] Refactored Context initialization 511 - [FIX] Refactored BasicAuth() 512 - [FIX] NoMethod/NoRoute handlers 513 - [FIX] Hijacking http 514 - [FIX] Better support for Google App Engine (using log instead of fmt) 515 516 517 ## Gin 0.6 (Mar 9, 2015) 518 519 - [NEW] Support multipart/form-data 520 - [NEW] NoMethod handler 521 - [NEW] Validate sub structures 522 - [NEW] Support for HTTP Realm Auth 523 - [FIX] Unsigned integers in binding 524 - [FIX] Improve color logger 525 526 527 ## Gin 0.5 (Feb 7, 2015) 528 529 - [NEW] Content Negotiation 530 - [FIX] Solved security bug that allow a client to spoof ip 531 - [FIX] Fix unexported/ignored fields in binding 532 533 534 ## Gin 0.4 (Aug 21, 2014) 535 536 - [NEW] Development mode 537 - [NEW] Unit tests 538 - [NEW] Add Content.Redirect() 539 - [FIX] Deferring WriteHeader() 540 - [FIX] Improved documentation for model binding 541 542 543 ## Gin 0.3 (Jul 18, 2014) 544 545 - [PERFORMANCE] Normal log and error log are printed in the same call. 546 - [PERFORMANCE] Improve performance of NoRouter() 547 - [PERFORMANCE] Improve context's memory locality, reduce CPU cache faults. 548 - [NEW] Flexible rendering API 549 - [NEW] Add Context.File() 550 - [NEW] Add shortcut RunTLS() for http.ListenAndServeTLS 551 - [FIX] Rename NotFound404() to NoRoute() 552 - [FIX] Errors in context are purged 553 - [FIX] Adds HEAD method in Static file serving 554 - [FIX] Refactors Static() file serving 555 - [FIX] Using keyed initialization to fix app-engine integration 556 - [FIX] Can't unmarshal JSON array, #63 557 - [FIX] Renaming Context.Req to Context.Request 558 - [FIX] Check application/x-www-form-urlencoded when parsing form 559 560 561 ## Gin 0.2b (Jul 08, 2014) 562 - [PERFORMANCE] Using sync.Pool to allocatio/gc overhead 563 - [NEW] Travis CI integration 564 - [NEW] Completely new logger 565 - [NEW] New API for serving static files. gin.Static() 566 - [NEW] gin.H() can be serialized into XML 567 - [NEW] Typed errors. Errors can be typed. Internet/external/custom. 568 - [NEW] Support for Godeps 569 - [NEW] Travis/Godocs badges in README 570 - [NEW] New Bind() and BindWith() methods for parsing request body. 571 - [NEW] Add Content.Copy() 572 - [NEW] Add context.LastError() 573 - [NEW] Add shortcut for OPTIONS HTTP method 574 - [FIX] Tons of README fixes 575 - [FIX] Header is written before body 576 - [FIX] BasicAuth() and changes API a little bit 577 - [FIX] Recovery() middleware only prints panics 578 - [FIX] Context.Get() does not panic anymore. Use MustGet() instead. 579 - [FIX] Multiple http.WriteHeader() in NotFound handlers 580 - [FIX] Engine.Run() panics if http server can't be set up 581 - [FIX] Crash when route path doesn't start with '/' 582 - [FIX] Do not update header when status code is negative 583 - [FIX] Setting response headers before calling WriteHeader in context.String() 584 - [FIX] Add MIT license 585 - [FIX] Changes behaviour of ErrorLogger() and Logger()