gin
packagemoduleThis package is not in the latest version of its module.
Details
Validgo.mod file
The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go.
Redistributable license
Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed.
Tagged version
Modules with tagged versions give importers more predictable builds.
Stable version
When a project reaches major version v1 it is considered stable.
- Learn more about best practices
Repository
Links
README¶
Gin Web Framework

Gin is a web framework written inGo. It features a martini-like API with performance that is up to 40 times faster thanks tohttprouter.If you need performance and good productivity, you will love Gin.
Gin's key features are:
- Zero allocation router
- Speed
- Middleware support
- Crash-free
- JSON validation
- Route grouping
- Error management
- Built-in rendering
- Extensible
Getting started
Prerequisites
Gin requiresGo version1.23 or above.
Getting Gin
WithGo's module support,go [build|run|test]
automatically fetches the necessary dependencies when you add the import in your code:
import "github.com/gin-gonic/gin"
Alternatively, usego get
:
go get -u github.com/gin-gonic/gin
Running Gin
A basic example:
package mainimport ( "net/http" "github.com/gin-gonic/gin")func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "pong", }) }) r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")}
To run the code, use thego run
command, like:
go run example.go
Then visit0.0.0.0:8080/ping
in your browser to see the response!
See more examples
Quick Start
Learn and practice with theGin Quick Start, which includes API examples and builds tag.
Examples
A number of ready-to-run examples demonstrating various use cases of Gin are available in theGin examples repository.
Documentation
See theAPI documentation on go.dev.
The documentation is also available ongin-gonic.com in several languages:
Articles
Benchmarks
Gin uses a custom version ofHttpRouter,see all benchmarks.
Benchmark name | (1) | (2) | (3) | (4) |
---|---|---|---|---|
BenchmarkGin_GithubAll | 43550 | 27364 ns/op | 0 B/op | 0 allocs/op |
BenchmarkAce_GithubAll | 40543 | 29670 ns/op | 0 B/op | 0 allocs/op |
BenchmarkAero_GithubAll | 57632 | 20648 ns/op | 0 B/op | 0 allocs/op |
BenchmarkBear_GithubAll | 9234 | 216179 ns/op | 86448 B/op | 943 allocs/op |
BenchmarkBeego_GithubAll | 7407 | 243496 ns/op | 71456 B/op | 609 allocs/op |
BenchmarkBone_GithubAll | 420 | 2922835 ns/op | 720160 B/op | 8620 allocs/op |
BenchmarkChi_GithubAll | 7620 | 238331 ns/op | 87696 B/op | 609 allocs/op |
BenchmarkDenco_GithubAll | 18355 | 64494 ns/op | 20224 B/op | 167 allocs/op |
BenchmarkEcho_GithubAll | 31251 | 38479 ns/op | 0 B/op | 0 allocs/op |
BenchmarkGocraftWeb_GithubAll | 4117 | 300062 ns/op | 131656 B/op | 1686 allocs/op |
BenchmarkGoji_GithubAll | 3274 | 416158 ns/op | 56112 B/op | 334 allocs/op |
BenchmarkGojiv2_GithubAll | 1402 | 870518 ns/op | 352720 B/op | 4321 allocs/op |
BenchmarkGoJsonRest_GithubAll | 2976 | 401507 ns/op | 134371 B/op | 2737 allocs/op |
BenchmarkGoRestful_GithubAll | 410 | 2913158 ns/op | 910144 B/op | 2938 allocs/op |
BenchmarkGorillaMux_GithubAll | 346 | 3384987 ns/op | 251650 B/op | 1994 allocs/op |
BenchmarkGowwwRouter_GithubAll | 10000 | 143025 ns/op | 72144 B/op | 501 allocs/op |
BenchmarkHttpRouter_GithubAll | 55938 | 21360 ns/op | 0 B/op | 0 allocs/op |
BenchmarkHttpTreeMux_GithubAll | 10000 | 153944 ns/op | 65856 B/op | 671 allocs/op |
BenchmarkKocha_GithubAll | 10000 | 106315 ns/op | 23304 B/op | 843 allocs/op |
BenchmarkLARS_GithubAll | 47779 | 25084 ns/op | 0 B/op | 0 allocs/op |
BenchmarkMacaron_GithubAll | 3266 | 371907 ns/op | 149409 B/op | 1624 allocs/op |
BenchmarkMartini_GithubAll | 331 | 3444706 ns/op | 226551 B/op | 2325 allocs/op |
BenchmarkPat_GithubAll | 273 | 4381818 ns/op | 1483152 B/op | 26963 allocs/op |
BenchmarkPossum_GithubAll | 10000 | 164367 ns/op | 84448 B/op | 609 allocs/op |
BenchmarkR2router_GithubAll | 10000 | 160220 ns/op | 77328 B/op | 979 allocs/op |
BenchmarkRivet_GithubAll | 14625 | 82453 ns/op | 16272 B/op | 167 allocs/op |
BenchmarkTango_GithubAll | 6255 | 279611 ns/op | 63826 B/op | 1618 allocs/op |
BenchmarkTigerTonic_GithubAll | 2008 | 687874 ns/op | 193856 B/op | 4474 allocs/op |
BenchmarkTraffic_GithubAll | 355 | 3478508 ns/op | 820744 B/op | 14114 allocs/op |
BenchmarkVulcan_GithubAll | 6885 | 193333 ns/op | 19894 B/op | 609 allocs/op |
- (1): Total Repetitions achieved in constant time, higher means more confident result
- (2): Single Repetition Duration (ns/op), lower is better
- (3): Heap Memory (B/op), lower is better
- (4): Average Allocations per Repetition (allocs/op), lower is better
Middleware
You can find many useful Gin middlewares atgin-contrib andgin-gonic/contrib.
Uses
Here are some awesome projects that are using theGin web framework.
- gorush: A push notification server.
- fnproject: A container native, cloud agnostic serverless platform.
- photoprism: Personal photo management powered by Google TensorFlow.
- lura: Ultra performant API Gateway with middleware.
- picfit: An image resizing server.
- dkron: Distributed, fault tolerant job scheduling system.
Contributing
Gin is the work of hundreds of contributors. We appreciate your help!
Please seeCONTRIBUTING.md for details on submitting patches and the contribution workflow.
Documentation¶
Overview¶
Package gin implements a HTTP web framework called gin.
Seehttps://gin-gonic.com/ for more information about gin.
Example:
package mainimport "github.com/gin-gonic/gin"func main() {r := gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message": "pong",})})r.Run() // listen and serve on 0.0.0.0:8080}
Index¶
- Constants
- Variables
- func CreateTestContext(w http.ResponseWriter) (c *Context, r *Engine)
- func Dir(root string, listDirectory bool) http.FileSystem
- func DisableBindValidation()
- func DisableConsoleColor()
- func EnableJsonDecoderDisallowUnknownFields()
- func EnableJsonDecoderUseNumber()
- func ForceConsoleColor()
- func IsDebugging() bool
- func Mode() string
- func SetMode(value string)
- type Accounts
- type Context
- func (c *Context) Abort()
- func (c *Context) AbortWithError(code int, err error) *Error
- func (c *Context) AbortWithStatus(code int)
- func (c *Context) AbortWithStatusJSON(code int, jsonObj any)
- func (c *Context) AbortWithStatusPureJSON(code int, jsonObj any)
- func (c *Context) AddParam(key, value string)
- func (c *Context) AsciiJSON(code int, obj any)
- func (c *Context) Bind(obj any) error
- func (c *Context) BindHeader(obj any) error
- func (c *Context) BindJSON(obj any) error
- func (c *Context) BindPlain(obj any) error
- func (c *Context) BindQuery(obj any) error
- func (c *Context) BindTOML(obj any) error
- func (c *Context) BindUri(obj any) error
- func (c *Context) BindWith(obj any, b binding.Binding) errordeprecated
- func (c *Context) BindXML(obj any) error
- func (c *Context) BindYAML(obj any) error
- func (c *Context) ClientIP() string
- func (c *Context) ContentType() string
- func (c *Context) Cookie(name string) (string, error)
- func (c *Context) Copy() *Context
- func (c *Context) Data(code int, contentType string, data []byte)
- func (c *Context) DataFromReader(code int, contentLength int64, contentType string, reader io.Reader, ...)
- func (c *Context) Deadline() (deadline time.Time, ok bool)
- func (c *Context) DefaultPostForm(key, defaultValue string) string
- func (c *Context) DefaultQuery(key, defaultValue string) string
- func (c *Context) Done() <-chan struct{}
- func (c *Context) Err() error
- func (c *Context) Error(err error) *Error
- func (c *Context) File(filepath string)
- func (c *Context) FileAttachment(filepath, filename string)
- func (c *Context) FileFromFS(filepath string, fs http.FileSystem)
- func (c *Context) FormFile(name string) (*multipart.FileHeader, error)
- func (c *Context) FullPath() string
- func (c *Context) Get(key any) (value any, exists bool)
- func (c *Context) GetBool(key any) (b bool)
- func (c *Context) GetDuration(key any) (d time.Duration)
- func (c *Context) GetFloat32(key any) (f32 float32)
- func (c *Context) GetFloat32Slice(key any) (f32s []float32)
- func (c *Context) GetFloat64(key any) (f64 float64)
- func (c *Context) GetFloat64Slice(key any) (f64s []float64)
- func (c *Context) GetHeader(key string) string
- func (c *Context) GetInt(key any) (i int)
- func (c *Context) GetInt16(key any) (i16 int16)
- func (c *Context) GetInt16Slice(key any) (i16s []int16)
- func (c *Context) GetInt32(key any) (i32 int32)
- func (c *Context) GetInt32Slice(key any) (i32s []int32)
- func (c *Context) GetInt64(key any) (i64 int64)
- func (c *Context) GetInt64Slice(key any) (i64s []int64)
- func (c *Context) GetInt8(key any) (i8 int8)
- func (c *Context) GetInt8Slice(key any) (i8s []int8)
- func (c *Context) GetIntSlice(key any) (is []int)
- func (c *Context) GetPostForm(key string) (string, bool)
- func (c *Context) GetPostFormArray(key string) (values []string, ok bool)
- func (c *Context) GetPostFormMap(key string) (map[string]string, bool)
- func (c *Context) GetQuery(key string) (string, bool)
- func (c *Context) GetQueryArray(key string) (values []string, ok bool)
- func (c *Context) GetQueryMap(key string) (map[string]string, bool)
- func (c *Context) GetRawData() ([]byte, error)
- func (c *Context) GetString(key any) (s string)
- func (c *Context) GetStringMap(key any) (sm map[string]any)
- func (c *Context) GetStringMapString(key any) (sms map[string]string)
- func (c *Context) GetStringMapStringSlice(key any) (smss map[string][]string)
- func (c *Context) GetStringSlice(key any) (ss []string)
- func (c *Context) GetTime(key any) (t time.Time)
- func (c *Context) GetUint(key any) (ui uint)
- func (c *Context) GetUint16(key any) (ui16 uint16)
- func (c *Context) GetUint16Slice(key any) (ui16s []uint16)
- func (c *Context) GetUint32(key any) (ui32 uint32)
- func (c *Context) GetUint32Slice(key any) (ui32s []uint32)
- func (c *Context) GetUint64(key any) (ui64 uint64)
- func (c *Context) GetUint64Slice(key any) (ui64s []uint64)
- func (c *Context) GetUint8(key any) (ui8 uint8)
- func (c *Context) GetUint8Slice(key any) (ui8s []uint8)
- func (c *Context) GetUintSlice(key any) (uis []uint)
- func (c *Context) HTML(code int, name string, obj any)
- func (c *Context) Handler() HandlerFunc
- func (c *Context) HandlerName() string
- func (c *Context) HandlerNames() []string
- func (c *Context) Header(key, value string)
- func (c *Context) IndentedJSON(code int, obj any)
- func (c *Context) IsAborted() bool
- func (c *Context) IsWebsocket() bool
- func (c *Context) JSON(code int, obj any)
- func (c *Context) JSONP(code int, obj any)
- func (c *Context) MultipartForm() (*multipart.Form, error)
- func (c *Context) MustBindWith(obj any, b binding.Binding) error
- func (c *Context) MustGet(key any) any
- func (c *Context) Negotiate(code int, config Negotiate)
- func (c *Context) NegotiateFormat(offered ...string) string
- func (c *Context) Next()
- func (c *Context) Param(key string) string
- func (c *Context) PostForm(key string) (value string)
- func (c *Context) PostFormArray(key string) (values []string)
- func (c *Context) PostFormMap(key string) (dicts map[string]string)
- func (c *Context) ProtoBuf(code int, obj any)
- func (c *Context) PureJSON(code int, obj any)
- func (c *Context) Query(key string) (value string)
- func (c *Context) QueryArray(key string) (values []string)
- func (c *Context) QueryMap(key string) (dicts map[string]string)
- func (c *Context) Redirect(code int, location string)
- func (c *Context) RemoteIP() string
- func (c *Context) Render(code int, r render.Render)
- func (c *Context) SSEvent(name string, message any)
- func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string, perm ...fs.FileMode) error
- func (c *Context) SecureJSON(code int, obj any)
- func (c *Context) Set(key any, value any)
- func (c *Context) SetAccepted(formats ...string)
- func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
- func (c *Context) SetCookieData(cookie *http.Cookie)
- func (c *Context) SetSameSite(samesite http.SameSite)
- func (c *Context) ShouldBind(obj any) error
- func (c *Context) ShouldBindBodyWith(obj any, bb binding.BindingBody) (err error)
- func (c *Context) ShouldBindBodyWithJSON(obj any) error
- func (c *Context) ShouldBindBodyWithPlain(obj any) error
- func (c *Context) ShouldBindBodyWithTOML(obj any) error
- func (c *Context) ShouldBindBodyWithXML(obj any) error
- func (c *Context) ShouldBindBodyWithYAML(obj any) error
- func (c *Context) ShouldBindHeader(obj any) error
- func (c *Context) ShouldBindJSON(obj any) error
- func (c *Context) ShouldBindPlain(obj any) error
- func (c *Context) ShouldBindQuery(obj any) error
- func (c *Context) ShouldBindTOML(obj any) error
- func (c *Context) ShouldBindUri(obj any) error
- func (c *Context) ShouldBindWith(obj any, b binding.Binding) error
- func (c *Context) ShouldBindXML(obj any) error
- func (c *Context) ShouldBindYAML(obj any) error
- func (c *Context) Status(code int)
- func (c *Context) Stream(step func(w io.Writer) bool) bool
- func (c *Context) String(code int, format string, values ...any)
- func (c *Context) TOML(code int, obj any)
- func (c *Context) Value(key any) any
- func (c *Context) XML(code int, obj any)
- func (c *Context) YAML(code int, obj any)
- type ContextKeyType
- type Engine
- func (engine *Engine) Delims(left, right string) *Engine
- func (engine *Engine) HandleContext(c *Context)
- func (engine *Engine) Handler() http.Handler
- func (engine *Engine) LoadHTMLFS(fs http.FileSystem, patterns ...string)
- func (engine *Engine) LoadHTMLFiles(files ...string)
- func (engine *Engine) LoadHTMLGlob(pattern string)
- func (engine *Engine) NoMethod(handlers ...HandlerFunc)
- func (engine *Engine) NoRoute(handlers ...HandlerFunc)
- func (engine *Engine) Routes() (routes RoutesInfo)
- func (engine *Engine) Run(addr ...string) (err error)
- func (engine *Engine) RunFd(fd int) (err error)
- func (engine *Engine) RunListener(listener net.Listener) (err error)
- func (engine *Engine) RunQUIC(addr, certFile, keyFile string) (err error)
- func (engine *Engine) RunTLS(addr, certFile, keyFile string) (err error)
- func (engine *Engine) RunUnix(file string) (err error)
- func (engine *Engine) SecureJsonPrefix(prefix string) *Engine
- func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request)
- func (engine *Engine) SetFuncMap(funcMap template.FuncMap)
- func (engine *Engine) SetHTMLTemplate(templ *template.Template)
- func (engine *Engine) SetTrustedProxies(trustedProxies []string) error
- func (engine *Engine) Use(middleware ...HandlerFunc) IRoutes
- func (engine *Engine) With(opts ...OptionFunc) *Engine
- type Error
- type ErrorType
- type H
- type HandlerFunc
- func BasicAuth(accounts Accounts) HandlerFunc
- func BasicAuthForProxy(accounts Accounts, realm string) HandlerFunc
- func BasicAuthForRealm(accounts Accounts, realm string) HandlerFunc
- func Bind(val any) HandlerFunc
- func CustomRecovery(handle RecoveryFunc) HandlerFunc
- func CustomRecoveryWithWriter(out io.Writer, handle RecoveryFunc) HandlerFunc
- func ErrorLogger() HandlerFunc
- func ErrorLoggerT(typ ErrorType) HandlerFunc
- func Logger() HandlerFunc
- func LoggerWithConfig(conf LoggerConfig) HandlerFunc
- func LoggerWithFormatter(f LogFormatter) HandlerFunc
- func LoggerWithWriter(out io.Writer, notlogged ...string) HandlerFunc
- func Recovery() HandlerFunc
- func RecoveryWithWriter(out io.Writer, recovery ...RecoveryFunc) HandlerFunc
- func WrapF(f http.HandlerFunc) HandlerFunc
- func WrapH(h http.Handler) HandlerFunc
- type HandlersChain
- type IRouter
- type IRoutes
- type LogFormatter
- type LogFormatterParams
- type LoggerConfig
- type Negotiate
- type OnlyFilesFS
- type OptionFunc
- type Param
- type Params
- type RecoveryFunc
- type ResponseWriter
- type RouteInfo
- type RouterGroup
- func (group *RouterGroup) Any(relativePath string, handlers ...HandlerFunc) IRoutes
- func (group *RouterGroup) BasePath() string
- func (group *RouterGroup) DELETE(relativePath string, handlers ...HandlerFunc) IRoutes
- func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes
- func (group *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup
- func (group *RouterGroup) HEAD(relativePath string, handlers ...HandlerFunc) IRoutes
- func (group *RouterGroup) Handle(httpMethod, relativePath string, handlers ...HandlerFunc) IRoutes
- func (group *RouterGroup) Match(methods []string, relativePath string, handlers ...HandlerFunc) IRoutes
- func (group *RouterGroup) OPTIONS(relativePath string, handlers ...HandlerFunc) IRoutes
- func (group *RouterGroup) PATCH(relativePath string, handlers ...HandlerFunc) IRoutes
- func (group *RouterGroup) POST(relativePath string, handlers ...HandlerFunc) IRoutes
- func (group *RouterGroup) PUT(relativePath string, handlers ...HandlerFunc) IRoutes
- func (group *RouterGroup) Static(relativePath, root string) IRoutes
- func (group *RouterGroup) StaticFS(relativePath string, fs http.FileSystem) IRoutes
- func (group *RouterGroup) StaticFile(relativePath, filepath string) IRoutes
- func (group *RouterGroup) StaticFileFS(relativePath, filepath string, fs http.FileSystem) IRoutes
- func (group *RouterGroup) Use(middleware ...HandlerFunc) IRoutes
- type RoutesInfo
- type Skipper
Constants¶
const (MIMEJSON =binding.MIMEJSONMIMEHTML =binding.MIMEHTMLMIMEXML =binding.MIMEXMLMIMEXML2 =binding.MIMEXML2MIMEPlain =binding.MIMEPlainMIMEPOSTForm =binding.MIMEPOSTFormMIMEMultipartPOSTForm =binding.MIMEMultipartPOSTFormMIMEYAML =binding.MIMEYAMLMIMEYAML2 =binding.MIMEYAML2MIMETOML =binding.MIMETOML)
Content-Type MIME of the most common data formats.
const (// PlatformGoogleAppEngine when running on Google App Engine. Trust X-Appengine-Remote-Addr// for determining the client's IPPlatformGoogleAppEngine = "X-Appengine-Remote-Addr"// PlatformCloudflare when using Cloudflare's CDN. Trust CF-Connecting-IP for determining// the client's IPPlatformCloudflare = "CF-Connecting-IP"// PlatformFlyIO when running on Fly.io. Trust Fly-Client-IP for determining the client's IPPlatformFlyIO = "Fly-Client-IP")
Trusted platforms
const (// DebugMode indicates gin mode is debug.DebugMode = "debug"// ReleaseMode indicates gin mode is release.ReleaseMode = "release"// TestMode indicates gin mode is test.TestMode = "test")
const AuthProxyUserKey = "proxy_user"
AuthProxyUserKey is the cookie name for proxy_user credential in basic auth for proxy.
const AuthUserKey = "user"
AuthUserKey is the cookie name for user credential in basic auth.
const BindKey = "_gin-gonic/gin/bindkey"
BindKey indicates a default bind key.
const BodyBytesKey = "_gin-gonic/gin/bodybyteskey"
BodyBytesKey indicates a default body bytes key.
const ContextKey = "_gin-gonic/gin/contextkey"
ContextKey is the key that a Context returns itself for.
const EnvGinMode = "GIN_MODE"
EnvGinMode indicates environment name for gin mode.
const Version = "v1.11.0"
Version is the current gin framework's version.
Variables¶
var DebugPrintFunc func(formatstring, values ...any)
DebugPrintFunc indicates debug log output format.
var DebugPrintRouteFunc func(httpMethod, absolutePath, handlerNamestring, nuHandlersint)
DebugPrintRouteFunc indicates debug log output format.
var DefaultErrorWriterio.Writer =os.Stderr
DefaultErrorWriter is the default io.Writer used by Gin to debug errors
var DefaultWriterio.Writer =os.Stdout
DefaultWriter is the default io.Writer used by Gin for debug output andmiddleware output like Logger() or Recovery().Note that both Logger and Recovery provides custom ways to configure theiroutput io.Writer.To support coloring in Windows use:
import "github.com/mattn/go-colorable"gin.DefaultWriter = colorable.NewColorableStdout()
Functions¶
funcCreateTestContext¶added inv1.3.0
func CreateTestContext(whttp.ResponseWriter) (c *Context, r *Engine)
CreateTestContext returns a fresh Engine and a Context associated with it.This is useful for tests that need to set up a new Gin engine instancealong with a context, for example, to test middleware that doesn't depend onspecific routes. The ResponseWriter `w` is used to initialize the context's writer.
funcDir¶
func Dir(rootstring, listDirectorybool)http.FileSystem
Dir returns an http.FileSystem that can be used by http.FileServer().It is used internally in router.Static().if listDirectory == true, then it works the same as http.Dir(),otherwise it returns a filesystem that prevents http.FileServer() to list the directory files.
funcDisableBindValidation¶
func DisableBindValidation()
DisableBindValidation closes the default validator.
funcDisableConsoleColor¶added inv1.3.0
func DisableConsoleColor()
DisableConsoleColor disables color output in the console.
funcEnableJsonDecoderDisallowUnknownFields¶added inv1.5.0
func EnableJsonDecoderDisallowUnknownFields()
EnableJsonDecoderDisallowUnknownFields sets true for binding.EnableDecoderDisallowUnknownFields tocall the DisallowUnknownFields method on the JSON Decoder instance.
funcEnableJsonDecoderUseNumber¶added inv1.3.0
func EnableJsonDecoderUseNumber()
EnableJsonDecoderUseNumber sets true for binding.EnableDecoderUseNumber tocall the UseNumber method on the JSON Decoder instance.
funcForceConsoleColor¶added inv1.4.0
func ForceConsoleColor()
ForceConsoleColor force color output in the console.
funcIsDebugging¶
func IsDebugging()bool
IsDebugging returns true if the framework is running in debug mode.Use SetMode(gin.ReleaseMode) to disable debug mode.
Types¶
typeContext¶
type Context struct {Request *http.RequestWriterResponseWriterParamsParams// Keys is a key/value pair exclusively for the context of each request.Keys map[any]any// Errors is a list of errors attached to all the handlers/middlewares who used this context.Errors errorMsgs// Accepted defines a list of manually accepted formats for content negotiation.Accepted []string// contains filtered or unexported fields}
Context is the most important part of gin. It allows us to pass variables between middleware,manage the flow, validate the JSON of a request and render a JSON response for example.
funcCreateTestContextOnly¶added inv1.8.2
func CreateTestContextOnly(whttp.ResponseWriter, r *Engine) (c *Context)
CreateTestContextOnly returns a fresh Context associated with the provided Engine `r`.This is useful for tests that operate on an existing, possibly pre-configured,Gin engine instance and need a new context for it.The ResponseWriter `w` is used to initialize the context's writer.The context is allocated with the `maxParams` setting from the provided engine.
func (*Context)Abort¶
func (c *Context) Abort()
Abort prevents pending handlers from being called. Note that this will not stop the current handler.Let's say you have an authorization middleware that validates that the current request is authorized.If the authorization fails (ex: the password does not match), call Abort to ensure the remaining handlersfor this request are not called.
func (*Context)AbortWithError¶
AbortWithError calls `AbortWithStatus()` and `Error()` internally.This method stops the chain, writes the status code and pushes the specified error to `c.Errors`.See Context.Error() for more details.
func (*Context)AbortWithStatus¶
AbortWithStatus calls `Abort()` and writes the headers with the specified status code.For example, a failed attempt to authenticate a request could use: context.AbortWithStatus(401).
func (*Context)AbortWithStatusJSON¶added inv1.3.0
AbortWithStatusJSON calls `Abort()` and then `JSON` internally.This method stops the chain, writes the status code and return a JSON body.It also sets the Content-Type as "application/json".
func (*Context)AbortWithStatusPureJSON¶added inv1.11.0
AbortWithStatusPureJSON calls `Abort()` and then `PureJSON` internally.This method stops the chain, writes the status code and return a JSON body without escaping.It also sets the Content-Type as "application/json".
func (*Context)AddParam¶added inv1.8.0
AddParam adds param to context andreplaces path param key with given value for e2e testing purposesExample Route: "/user/:id"AddParam("id", 1)Result: "/user/1"
func (*Context)AsciiJSON¶added inv1.3.0
AsciiJSON serializes the given struct as JSON into the response body with unicode to ASCII string.It also sets the Content-Type as "application/json".
func (*Context)Bind¶
Bind checks the Method and Content-Type to select a binding engine automatically,Depending on the "Content-Type" header different bindings are used, for example:
"application/json" --> JSON binding"application/xml" --> XML binding
It parses the request's body as JSON if Content-Type == "application/json" using JSON or XML as a JSON input.It decodes the json payload into the struct specified as a pointer.It writes a 400 error and sets Content-Type header "text/plain" in the response if input is not valid.
func (*Context)BindHeader¶added inv1.5.0
BindHeader is a shortcut for c.MustBindWith(obj, binding.Header).
func (*Context)BindPlain¶added inv1.11.0
BindPlain is a shortcut for c.MustBindWith(obj, binding.Plain).
func (*Context)BindQuery¶added inv1.3.0
BindQuery is a shortcut for c.MustBindWith(obj, binding.Query).
func (*Context)BindUri¶added inv1.4.0
BindUri binds the passed struct pointer using binding.Uri.It will abort the request with HTTP 400 if any error occurs.
func (*Context)BindXML¶added inv1.4.0
BindXML is a shortcut for c.MustBindWith(obj, binding.BindXML).
func (*Context)ClientIP¶
ClientIP implements one best effort algorithm to return the real client IP.It calls c.RemoteIP() under the hood, to check if the remote IP is a trusted proxy or not.If it is it will then try to parse the headers defined in Engine.RemoteIPHeaders (defaulting to [X-Forwarded-For, X-Real-IP]).If the headers are not syntactically valid OR the remote IP does not correspond to a trusted proxy,the remote IP (coming from Request.RemoteAddr) is returned.
func (*Context)ContentType¶
ContentType returns the Content-Type header of the request.
func (*Context)Cookie¶
Cookie returns the named cookie provided in the request orErrNoCookie if not found. And return the named cookie is unescaped.If multiple cookies match the given name, only one cookie willbe returned.
func (*Context)Copy¶
Copy returns a copy of the current context that can be safely used outside the request's scope.This has to be used when the context has to be passed to a goroutine.
func (*Context)DataFromReader¶added inv1.3.0
func (c *Context) DataFromReader(codeint, contentLengthint64, contentTypestring, readerio.Reader, extraHeaders map[string]string)
DataFromReader writes the specified reader into the body stream and updates the HTTP code.
func (*Context)Deadline¶
Deadline returns that there is no deadline (ok==false) when c.Request has no Context.
func (*Context)DefaultPostForm¶
DefaultPostForm returns the specified key from a POST urlencoded form or multipart formwhen it exists, otherwise it returns the specified defaultValue string.See: PostForm() and GetPostForm() for further information.
func (*Context)DefaultQuery¶
DefaultQuery returns the keyed url query value if it exists,otherwise it returns the specified defaultValue string.See: Query() and GetQuery() for further information.
GET /?name=Manu&lastname=c.DefaultQuery("name", "unknown") == "Manu"c.DefaultQuery("id", "none") == "none"c.DefaultQuery("lastname", "none") == ""
func (*Context)Done¶
func (c *Context) Done() <-chan struct{}
Done returns nil (chan which will wait forever) when c.Request has no Context.
func (*Context)Error¶
Error attaches an error to the current context. The error is pushed to a list of errors.It's a good idea to call Error for each error that occurred during the resolution of a request.A middleware can be used to collect all the errors and push them to a database together,print a log, or append it in the HTTP response.Error will panic if err is nil.
func (*Context)FileAttachment¶added inv1.4.0
FileAttachment writes the specified file into the body stream in an efficient wayOn the client side, the file will typically be downloaded with the given filename
func (*Context)FileFromFS¶added inv1.6.0
func (c *Context) FileFromFS(filepathstring, fshttp.FileSystem)
FileFromFS writes the specified file from http.FileSystem into the body stream in an efficient way.
func (*Context)FormFile¶added inv1.3.0
func (c *Context) FormFile(namestring) (*multipart.FileHeader,error)
FormFile returns the first file for the provided form key.
func (*Context)FullPath¶added inv1.5.0
FullPath returns a matched route full path. For not found routesreturns an empty string.
router.GET("/user/:id", func(c *gin.Context) { c.FullPath() == "/user/:id" // true})
func (*Context)Get¶
Get returns the value for the given key, ie: (value, true).If the value does not exist it returns (nil, false)
func (*Context)GetBool¶added inv1.3.0
GetBool returns the value associated with the key as a boolean.
func (*Context)GetDuration¶added inv1.3.0
GetDuration returns the value associated with the key as a duration.
func (*Context)GetFloat32¶added inv1.11.0
GetFloat32 returns the value associated with the key as a float32.
func (*Context)GetFloat32Slice¶added inv1.11.0
GetFloat32Slice returns the value associated with the key as a slice of float32 numbers.
func (*Context)GetFloat64¶added inv1.3.0
GetFloat64 returns the value associated with the key as a float64.
func (*Context)GetFloat64Slice¶added inv1.11.0
GetFloat64Slice returns the value associated with the key as a slice of float64 numbers.
func (*Context)GetInt16¶added inv1.11.0
GetInt16 returns the value associated with the key as an integer 16.
func (*Context)GetInt16Slice¶added inv1.11.0
GetInt16Slice returns the value associated with the key as a slice of int16 integers.
func (*Context)GetInt32¶added inv1.11.0
GetInt32 returns the value associated with the key as an integer 32.
func (*Context)GetInt32Slice¶added inv1.11.0
GetInt32Slice returns the value associated with the key as a slice of int32 integers.
func (*Context)GetInt64¶added inv1.3.0
GetInt64 returns the value associated with the key as an integer 64.
func (*Context)GetInt64Slice¶added inv1.11.0
GetInt64Slice returns the value associated with the key as a slice of int64 integers.
func (*Context)GetInt8¶added inv1.11.0
GetInt8 returns the value associated with the key as an integer 8.
func (*Context)GetInt8Slice¶added inv1.11.0
GetInt8Slice returns the value associated with the key as a slice of int8 integers.
func (*Context)GetIntSlice¶added inv1.11.0
GetIntSlice returns the value associated with the key as a slice of integers.
func (*Context)GetPostForm¶
GetPostForm is like PostForm(key). It returns the specified key from a POST urlencodedform or multipart form when it exists `(value, true)` (even when the value is an empty string),otherwise it returns ("", false).For example, during a PATCH request to update the user's email:
email=mail@example.com --> ("mail@example.com", true) := GetPostForm("email") // set email to "mail@example.com" email= --> ("", true) := GetPostForm("email") // set email to "" --> ("", false) := GetPostForm("email") // do nothing with email
func (*Context)GetPostFormArray¶
GetPostFormArray returns a slice of strings for a given form key, plusa boolean value whether at least one value exists for the given key.
func (*Context)GetPostFormMap¶added inv1.3.0
GetPostFormMap returns a map for a given form key, plus a boolean valuewhether at least one value exists for the given key.
func (*Context)GetQuery¶
GetQuery is like Query(), it returns the keyed url query valueif it exists `(value, true)` (even when the value is an empty string),otherwise it returns `("", false)`.It is shortcut for `c.Request.URL.Query().Get(key)`
GET /?name=Manu&lastname=("Manu", true) == c.GetQuery("name")("", false) == c.GetQuery("id")("", true) == c.GetQuery("lastname")
func (*Context)GetQueryArray¶
GetQueryArray returns a slice of strings for a given query key, plusa boolean value whether at least one value exists for the given key.
func (*Context)GetQueryMap¶added inv1.3.0
GetQueryMap returns a map for a given query key, plus a boolean valuewhether at least one value exists for the given key.
func (*Context)GetRawData¶added inv1.3.0
GetRawData returns stream data.
func (*Context)GetString¶added inv1.3.0
GetString returns the value associated with the key as a string.
func (*Context)GetStringMap¶added inv1.3.0
GetStringMap returns the value associated with the key as a map of interfaces.
func (*Context)GetStringMapString¶added inv1.3.0
GetStringMapString returns the value associated with the key as a map of strings.
func (*Context)GetStringMapStringSlice¶added inv1.3.0
GetStringMapStringSlice returns the value associated with the key as a map to a slice of strings.
func (*Context)GetStringSlice¶added inv1.3.0
GetStringSlice returns the value associated with the key as a slice of strings.
func (*Context)GetUint¶added inv1.7.0
GetUint returns the value associated with the key as an unsigned integer.
func (*Context)GetUint16¶added inv1.11.0
GetUint16 returns the value associated with the key as an unsigned integer 16.
func (*Context)GetUint16Slice¶added inv1.11.0
GetUint16Slice returns the value associated with the key as a slice of uint16 integers.
func (*Context)GetUint32¶added inv1.11.0
GetUint32 returns the value associated with the key as an unsigned integer 32.
func (*Context)GetUint32Slice¶added inv1.11.0
GetUint32Slice returns the value associated with the key as a slice of uint32 integers.
func (*Context)GetUint64¶added inv1.7.0
GetUint64 returns the value associated with the key as an unsigned integer 64.
func (*Context)GetUint64Slice¶added inv1.11.0
GetUint64Slice returns the value associated with the key as a slice of uint64 integers.
func (*Context)GetUint8¶added inv1.11.0
GetUint8 returns the value associated with the key as an unsigned integer 8.
func (*Context)GetUint8Slice¶added inv1.11.0
GetUint8Slice returns the value associated with the key as a slice of uint8 integers.
func (*Context)GetUintSlice¶added inv1.11.0
GetUintSlice returns the value associated with the key as a slice of unsigned integers.
func (*Context)HTML¶
HTML renders the HTTP template specified by its file name.It also updates the HTTP code and sets the Content-Type as "text/html".Seehttp://golang.org/doc/articles/wiki/
func (*Context)Handler¶added inv1.3.0
func (c *Context) Handler()HandlerFunc
Handler returns the main handler.
func (*Context)HandlerName¶
HandlerName returns the main handler's name. For example if the handler is "handleGetUsers()",this function will return "main.handleGetUsers".
func (*Context)HandlerNames¶added inv1.4.0
HandlerNames returns a list of all registered handlers for this context in descending order,following the semantics of HandlerName()
func (*Context)Header¶
Header is an intelligent shortcut for c.Writer.Header().Set(key, value).It writes a header in the response.If value == "", this method removes the header `c.Writer.Header().Del(key)`
func (*Context)IndentedJSON¶
IndentedJSON serializes the given struct as pretty JSON (indented + endlines) into the response body.It also sets the Content-Type as "application/json".WARNING: we recommend using this only for development purposes since printing pretty JSON ismore CPU and bandwidth consuming. Use Context.JSON() instead.
func (*Context)IsWebsocket¶added inv1.3.0
IsWebsocket returns true if the request headers indicate that a websockethandshake is being initiated by the client.
func (*Context)JSON¶
JSON serializes the given struct as JSON into the response body.It also sets the Content-Type as "application/json".
func (*Context)JSONP¶added inv1.3.0
JSONP serializes the given struct as JSON into the response body.It adds padding to response body to request data from a server residing in a different domain than the client.It also sets the Content-Type as "application/javascript".
func (*Context)MultipartForm¶added inv1.3.0
MultipartForm is the parsed multipart form, including file uploads.
func (*Context)MustBindWith¶added inv1.3.0
MustBindWith binds the passed struct pointer using the specified binding engine.It will abort the request with HTTP 400 if any error occurs.See the binding package.
func (*Context)MustGet¶
MustGet returns the value for the given key if it exists, otherwise it panics.
func (*Context)NegotiateFormat¶
NegotiateFormat returns an acceptable Accept format.
func (*Context)Next¶
func (c *Context) Next()
Next should be used only inside middleware.It executes the pending handlers in the chain inside the calling handler.See example in GitHub.
func (*Context)Param¶
Param returns the value of the URL param.It is a shortcut for c.Params.ByName(key)
router.GET("/user/:id", func(c *gin.Context) { // a GET request to /user/john id := c.Param("id") // id == "john" // a GET request to /user/john/ id := c.Param("id") // id == "/john/"})
func (*Context)PostForm¶
PostForm returns the specified key from a POST urlencoded form or multipart formwhen it exists, otherwise it returns an empty string `("")`.
func (*Context)PostFormArray¶
PostFormArray returns a slice of strings for a given form key.The length of the slice depends on the number of params with the given key.
func (*Context)PostFormMap¶added inv1.3.0
PostFormMap returns a map for a given form key.
func (*Context)ProtoBuf¶added inv1.4.0
ProtoBuf serializes the given struct as ProtoBuf into the response body.
func (*Context)PureJSON¶added inv1.4.0
PureJSON serializes the given struct as JSON into the response body.PureJSON, unlike JSON, does not replace special html characters with their unicode entities.
func (*Context)Query¶
Query returns the keyed url query value if it exists,otherwise it returns an empty string `("")`.It is shortcut for `c.Request.URL.Query().Get(key)`
GET /path?id=1234&name=Manu&value= c.Query("id") == "1234" c.Query("name") == "Manu" c.Query("value") == "" c.Query("wtf") == ""
func (*Context)QueryArray¶
QueryArray returns a slice of strings for a given query key.The length of the slice depends on the number of params with the given key.
func (*Context)RemoteIP¶added inv1.7.0
RemoteIP parses the IP from Request.RemoteAddr, normalizes and returns the IP (without the port).
func (*Context)SaveUploadedFile¶added inv1.3.0
SaveUploadedFile uploads the form file to specific dst.
func (*Context)SecureJSON¶added inv1.3.0
SecureJSON serializes the given struct as Secure JSON into the response body.Default prepends "while(1)," to response body if the given struct is array values.It also sets the Content-Type as "application/json".
func (*Context)Set¶
Set is used to store a new key/value pair exclusively for this context.It also lazy initializes c.Keys if it was not used previously.
func (*Context)SetAccepted¶
SetAccepted sets Accept header data.
func (*Context)SetCookie¶
SetCookie adds a Set-Cookie header to the ResponseWriter's headers.The provided cookie must have a valid Name. Invalid cookies may besilently dropped.
func (*Context)SetCookieData¶added inv1.11.0
SetCookieData adds a Set-Cookie header to the ResponseWriter's headers.It accepts a pointer to http.Cookie structure for more flexibility in setting cookie attributes.The provided cookie must have a valid Name. Invalid cookies may be silently dropped.
func (*Context)SetSameSite¶added inv1.6.2
SetSameSite with cookie
func (*Context)ShouldBind¶added inv1.3.0
ShouldBind checks the Method and Content-Type to select a binding engine automatically,Depending on the "Content-Type" header different bindings are used, for example:
"application/json" --> JSON binding"application/xml" --> XML binding
It parses the request's body as JSON if Content-Type == "application/json" using JSON or XML as a JSON input.It decodes the json payload into the struct specified as a pointer.Like c.Bind() but this method does not set the response status code to 400 or abort if input is not valid.
func (*Context)ShouldBindBodyWith¶added inv1.3.0
func (c *Context) ShouldBindBodyWith(objany, bbbinding.BindingBody) (errerror)
ShouldBindBodyWith is similar with ShouldBindWith, but it stores the requestbody into the context, and reuse when it is called again.
NOTE: This method reads the body before binding. So you should useShouldBindWith for better performance if you need to call only once.
func (*Context)ShouldBindBodyWithJSON¶added inv1.10.0
ShouldBindBodyWithJSON is a shortcut for c.ShouldBindBodyWith(obj, binding.JSON).
func (*Context)ShouldBindBodyWithPlain¶added inv1.11.0
ShouldBindBodyWithPlain is a shortcut for c.ShouldBindBodyWith(obj, binding.Plain).
func (*Context)ShouldBindBodyWithTOML¶added inv1.10.0
ShouldBindBodyWithTOML is a shortcut for c.ShouldBindBodyWith(obj, binding.TOML).
func (*Context)ShouldBindBodyWithXML¶added inv1.10.0
ShouldBindBodyWithXML is a shortcut for c.ShouldBindBodyWith(obj, binding.XML).
func (*Context)ShouldBindBodyWithYAML¶added inv1.10.0
ShouldBindBodyWithYAML is a shortcut for c.ShouldBindBodyWith(obj, binding.YAML).
func (*Context)ShouldBindHeader¶added inv1.5.0
ShouldBindHeader is a shortcut for c.ShouldBindWith(obj, binding.Header).
func (*Context)ShouldBindJSON¶added inv1.3.0
ShouldBindJSON is a shortcut for c.ShouldBindWith(obj, binding.JSON).
func (*Context)ShouldBindPlain¶added inv1.11.0
ShouldBindPlain is a shortcut for c.ShouldBindWith(obj, binding.Plain).
func (*Context)ShouldBindQuery¶added inv1.3.0
ShouldBindQuery is a shortcut for c.ShouldBindWith(obj, binding.Query).
func (*Context)ShouldBindTOML¶added inv1.8.0
ShouldBindTOML is a shortcut for c.ShouldBindWith(obj, binding.TOML).
func (*Context)ShouldBindUri¶added inv1.4.0
ShouldBindUri binds the passed struct pointer using the specified binding engine.
func (*Context)ShouldBindWith¶added inv1.3.0
ShouldBindWith binds the passed struct pointer using the specified binding engine.See the binding package.
func (*Context)ShouldBindXML¶added inv1.4.0
ShouldBindXML is a shortcut for c.ShouldBindWith(obj, binding.XML).
func (*Context)ShouldBindYAML¶added inv1.4.0
ShouldBindYAML is a shortcut for c.ShouldBindWith(obj, binding.YAML).
func (*Context)Stream¶
Stream sends a streaming response and returns a booleanindicates "Is client disconnected in middle of stream"
func (*Context)Value¶
Value returns the value associated with this context for key, or nilif no value is associated with key. Successive calls to Value withthe same key returns the same result.
typeEngine¶
type Engine struct {RouterGroup// RedirectTrailingSlash enables automatic redirection if the current route can't be matched but a// handler for the path with (without) the trailing slash exists.// For example if /foo/ is requested but a route only exists for /foo, the// client is redirected to /foo with http status code 301 for GET requests// and 307 for all other request methods.RedirectTrailingSlashbool// RedirectFixedPath if enabled, the router tries to fix the current request path, if no// handle is registered for it.// First superfluous path elements like ../ or // are removed.// Afterwards the router does a case-insensitive lookup of the cleaned path.// If a handle can be found for this route, the router makes a redirection// to the corrected path with status code 301 for GET requests and 307 for// all other request methods.// For example /FOO and /..//Foo could be redirected to /foo.// RedirectTrailingSlash is independent of this option.RedirectFixedPathbool// HandleMethodNotAllowed if enabled, the router checks if another method is allowed for the// current route, if the current request can not be routed.// If this is the case, the request is answered with 'Method Not Allowed'// and HTTP status code 405.// If no other Method is allowed, the request is delegated to the NotFound// handler.HandleMethodNotAllowedbool// ForwardedByClientIP if enabled, client IP will be parsed from the request's headers that// match those stored at `(*gin.Engine).RemoteIPHeaders`. If no IP was// fetched, it falls back to the IP obtained from// `(*gin.Context).Request.RemoteAddr`.ForwardedByClientIPbool// AppEngine was deprecated.// Deprecated: USE `TrustedPlatform` WITH VALUE `gin.PlatformGoogleAppEngine` INSTEAD// #726 #755 If enabled, it will trust some headers starting with// 'X-AppEngine...' for better integration with that PaaS.AppEnginebool// UseRawPath if enabled, the url.RawPath will be used to find parameters.UseRawPathbool// UnescapePathValues if true, the path value will be unescaped.// If UseRawPath is false (by default), the UnescapePathValues effectively is true,// as url.Path gonna be used, which is already unescaped.UnescapePathValuesbool// RemoveExtraSlash a parameter can be parsed from the URL even with extra slashes.// See the PR #1817 and issue #1644RemoveExtraSlashbool// RemoteIPHeaders list of headers used to obtain the client IP when// `(*gin.Engine).ForwardedByClientIP` is `true` and// `(*gin.Context).Request.RemoteAddr` is matched by at least one of the// network origins of list defined by `(*gin.Engine).SetTrustedProxies()`.RemoteIPHeaders []string// TrustedPlatform if set to a constant of value gin.Platform*, trusts the headers set by// that platform, for example to determine the client IPTrustedPlatformstring// MaxMultipartMemory value of 'maxMemory' param that is given to http.Request's ParseMultipartForm// method call.MaxMultipartMemoryint64// UseH2C enable h2c support.UseH2Cbool// ContextWithFallback enable fallback Context.Deadline(), Context.Done(), Context.Err() and Context.Value() when Context.Request.Context() is not nil.ContextWithFallbackboolHTMLRenderrender.HTMLRenderFuncMaptemplate.FuncMap// contains filtered or unexported fields}
Engine is the framework's instance, it contains the muxer, middleware and configuration settings.Create an instance of Engine, by using New() or Default()
funcDefault¶
func Default(opts ...OptionFunc) *Engine
Default returns an Engine instance with the Logger and Recovery middleware already attached.
funcNew¶
func New(opts ...OptionFunc) *Engine
New returns a new blank Engine instance without any middleware attached.By default, the configuration is:- RedirectTrailingSlash: true- RedirectFixedPath: false- HandleMethodNotAllowed: false- ForwardedByClientIP: true- UseRawPath: false- UnescapePathValues: true
func (*Engine)Delims¶added inv1.3.0
Delims sets template left and right delims and returns an Engine instance.
func (*Engine)HandleContext¶added inv1.3.0
HandleContext re-enters a context that has been rewritten.This can be done by setting c.Request.URL.Path to your new target.Disclaimer: You can loop yourself to deal with this, use wisely.
func (*Engine)LoadHTMLFS¶added inv1.11.0
func (engine *Engine) LoadHTMLFS(fshttp.FileSystem, patterns ...string)
LoadHTMLFS loads an http.FileSystem and a slice of patternsand associates the result with HTML renderer.
func (*Engine)LoadHTMLFiles¶
LoadHTMLFiles loads a slice of HTML filesand associates the result with HTML renderer.
func (*Engine)LoadHTMLGlob¶
LoadHTMLGlob loads HTML files identified by glob patternand associates the result with HTML renderer.
func (*Engine)NoMethod¶
func (engine *Engine) NoMethod(handlers ...HandlerFunc)
NoMethod sets the handlers called when Engine.HandleMethodNotAllowed = true.
func (*Engine)NoRoute¶
func (engine *Engine) NoRoute(handlers ...HandlerFunc)
NoRoute adds handlers for NoRoute. It returns a 404 code by default.
func (*Engine)Routes¶
func (engine *Engine) Routes() (routesRoutesInfo)
Routes returns a slice of registered routes, including some useful information, such as:the http method, path, and the handler name.
func (*Engine)Run¶
Run attaches the router to a http.Server and starts listening and serving HTTP requests.It is a shortcut for http.ListenAndServe(addr, router)Note: this method will block the calling goroutine indefinitely unless an error happens.
func (*Engine)RunFd¶added inv1.4.0
RunFd attaches the router to a http.Server and starts listening and serving HTTP requeststhrough the specified file descriptor.Note: this method will block the calling goroutine indefinitely unless an error happens.
func (*Engine)RunListener¶added inv1.5.0
RunListener attaches the router to a http.Server and starts listening and serving HTTP requeststhrough the specified net.Listener
func (*Engine)RunQUIC¶added inv1.11.0
RunQUIC attaches the router to a http.Server and starts listening and serving QUIC requests.It is a shortcut for http3.ListenAndServeQUIC(addr, certFile, keyFile, router)Note: this method will block the calling goroutine indefinitely unless an error happens.
func (*Engine)RunTLS¶
RunTLS attaches the router to a http.Server and starts listening and serving HTTPS (secure) requests.It is a shortcut for http.ListenAndServeTLS(addr, certFile, keyFile, router)Note: this method will block the calling goroutine indefinitely unless an error happens.
func (*Engine)RunUnix¶
RunUnix attaches the router to a http.Server and starts listening and serving HTTP requeststhrough the specified unix socket (i.e. a file).Note: this method will block the calling goroutine indefinitely unless an error happens.
func (*Engine)SecureJsonPrefix¶added inv1.3.0
SecureJsonPrefix sets the secureJSONPrefix used in Context.SecureJSON.
func (*Engine)ServeHTTP¶
func (engine *Engine) ServeHTTP(whttp.ResponseWriter, req *http.Request)
ServeHTTP conforms to the http.Handler interface.
func (*Engine)SetFuncMap¶added inv1.3.0
SetFuncMap sets the FuncMap used for template.FuncMap.
func (*Engine)SetHTMLTemplate¶
SetHTMLTemplate associate a template with HTML renderer.
func (*Engine)SetTrustedProxies¶added inv1.7.5
SetTrustedProxies set a list of network origins (IPv4 addresses,IPv4 CIDRs, IPv6 addresses or IPv6 CIDRs) from which to trustrequest's headers that contain alternative client IP when`(*gin.Engine).ForwardedByClientIP` is `true`. `TrustedProxies`feature is enabled by default, and it also trusts all proxiesby default. If you want to disable this feature, useEngine.SetTrustedProxies(nil), then Context.ClientIP() willreturn the remote address directly.
func (*Engine)Use¶
func (engine *Engine) Use(middleware ...HandlerFunc)IRoutes
Use attaches a global middleware to the router. i.e. the middleware attached through Use() will beincluded in the handlers chain for every single request. Even 404, 405, static files...For example, this is the right place for a logger or error management middleware.
func (*Engine)With¶added inv1.10.0
func (engine *Engine) With(opts ...OptionFunc) *Engine
With returns an Engine with the configuration set in the OptionFunc.
typeError¶
Error represents a error's specification.
func (*Error)MarshalJSON¶
MarshalJSON implements the json.Marshaller interface.
typeErrorType¶
type ErrorTypeuint64
ErrorType is an unsigned 64-bit error code as defined in the gin spec.
const (// ErrorTypeBind is used when Context.Bind() fails.ErrorTypeBindErrorType = 1 << 63// ErrorTypeRender is used when Context.Render() fails.ErrorTypeRenderErrorType = 1 << 62// ErrorTypePrivate indicates a private error.ErrorTypePrivateErrorType = 1 << 0// ErrorTypePublic indicates a public error.ErrorTypePublicErrorType = 1 << 1// ErrorTypeAny indicates any other error.ErrorTypeAnyErrorType = 1<<64 - 1// ErrorTypeNu indicates any other error.ErrorTypeNu = 2)
typeH¶
H is a shortcut for map[string]any
func (H)MarshalXML¶
MarshalXML allows type H to be used with xml.Marshal.
typeHandlerFunc¶
type HandlerFunc func(*Context)
HandlerFunc defines the handler used by gin middleware as return value.
funcBasicAuth¶
func BasicAuth(accountsAccounts)HandlerFunc
BasicAuth returns a Basic HTTP Authorization middleware. It takes as argument a map[string]string wherethe key is the user name and the value is the password.
funcBasicAuthForProxy¶added inv1.10.0
func BasicAuthForProxy(accountsAccounts, realmstring)HandlerFunc
BasicAuthForProxy returns a Basic HTTP Proxy-Authorization middleware.If the realm is empty, "Proxy Authorization Required" will be used by default.
funcBasicAuthForRealm¶
func BasicAuthForRealm(accountsAccounts, realmstring)HandlerFunc
BasicAuthForRealm returns a Basic HTTP Authorization middleware. It takes as arguments a map[string]string wherethe key is the user name and the value is the password, as well as the name of the Realm.If the realm is empty, "Authorization Required" will be used by default.(seehttp://tools.ietf.org/html/rfc2617#section-1.2)
funcBind¶
func Bind(valany)HandlerFunc
Bind is a helper function for given interface object and returns a Gin middleware.
funcCustomRecovery¶added inv1.7.0
func CustomRecovery(handleRecoveryFunc)HandlerFunc
CustomRecovery returns a middleware that recovers from any panics and calls the provided handle func to handle it.
funcCustomRecoveryWithWriter¶added inv1.7.0
func CustomRecoveryWithWriter(outio.Writer, handleRecoveryFunc)HandlerFunc
CustomRecoveryWithWriter returns a middleware for a given writer that recovers from any panics and calls the provided handle func to handle it.
funcErrorLoggerT¶
func ErrorLoggerT(typErrorType)HandlerFunc
ErrorLoggerT returns a HandlerFunc for a given error type.
funcLogger¶
func Logger()HandlerFunc
Logger instances a Logger middleware that will write the logs to gin.DefaultWriter.By default, gin.DefaultWriter = os.Stdout.
funcLoggerWithConfig¶added inv1.4.0
func LoggerWithConfig(confLoggerConfig)HandlerFunc
LoggerWithConfig instance a Logger middleware with config.
funcLoggerWithFormatter¶added inv1.4.0
func LoggerWithFormatter(fLogFormatter)HandlerFunc
LoggerWithFormatter instance a Logger middleware with the specified log format function.
funcLoggerWithWriter¶
func LoggerWithWriter(outio.Writer, notlogged ...string)HandlerFunc
LoggerWithWriter instance a Logger middleware with the specified writer buffer.Example: os.Stdout, a file opened in write mode, a socket...
funcRecovery¶
func Recovery()HandlerFunc
Recovery returns a middleware that recovers from any panics and writes a 500 if there was one.
funcRecoveryWithWriter¶
func RecoveryWithWriter(outio.Writer, recovery ...RecoveryFunc)HandlerFunc
RecoveryWithWriter returns a middleware for a given writer that recovers from any panics and writes a 500 if there was one.
funcWrapF¶
func WrapF(fhttp.HandlerFunc)HandlerFunc
WrapF is a helper function for wrapping http.HandlerFunc and returns a Gin middleware.
funcWrapH¶
func WrapH(hhttp.Handler)HandlerFunc
WrapH is a helper function for wrapping http.Handler and returns a Gin middleware.
typeHandlersChain¶
type HandlersChain []HandlerFunc
HandlersChain defines a HandlerFunc slice.
func (HandlersChain)Last¶
func (cHandlersChain) Last()HandlerFunc
Last returns the last handler in the chain. i.e. the last handler is the main one.
typeIRouter¶
type IRouter interface {IRoutesGroup(string, ...HandlerFunc) *RouterGroup}
IRouter defines all router handle interface includes single and group router.
typeIRoutes¶
type IRoutes interface {Use(...HandlerFunc)IRoutesHandle(string,string, ...HandlerFunc)IRoutesAny(string, ...HandlerFunc)IRoutesGET(string, ...HandlerFunc)IRoutesPOST(string, ...HandlerFunc)IRoutesDELETE(string, ...HandlerFunc)IRoutesPATCH(string, ...HandlerFunc)IRoutesPUT(string, ...HandlerFunc)IRoutesOPTIONS(string, ...HandlerFunc)IRoutesHEAD(string, ...HandlerFunc)IRoutesMatch([]string,string, ...HandlerFunc)IRoutesStaticFile(string,string)IRoutesStaticFileFS(string,string,http.FileSystem)IRoutesStatic(string,string)IRoutesStaticFS(string,http.FileSystem)IRoutes}
IRoutes defines all router handle interface.
typeLogFormatter¶added inv1.4.0
type LogFormatter func(paramsLogFormatterParams)string
LogFormatter gives the signature of the formatter function passed to LoggerWithFormatter
typeLogFormatterParams¶added inv1.4.0
type LogFormatterParams struct {Request *http.Request// TimeStamp shows the time after the server returns a response.TimeStamptime.Time// StatusCode is HTTP response code.StatusCodeint// Latency is how much time the server cost to process a certain request.Latencytime.Duration// ClientIP equals Context's ClientIP method.ClientIPstring// Method is the HTTP method given to the request.Methodstring// Path is a path the client requests.Pathstring// ErrorMessage is set if error has occurred in processing the request.ErrorMessagestring// BodySize is the size of the Response BodyBodySizeint// Keys are the keys set on the request's context.Keys map[any]any// contains filtered or unexported fields}
LogFormatterParams is the structure any formatter will be handed when time to log comes
func (*LogFormatterParams)IsOutputColor¶added inv1.4.0
func (p *LogFormatterParams) IsOutputColor()bool
IsOutputColor indicates whether can colors be outputted to the log.
func (*LogFormatterParams)MethodColor¶added inv1.4.0
func (p *LogFormatterParams) MethodColor()string
MethodColor is the ANSI color for appropriately logging http method to a terminal.
func (*LogFormatterParams)ResetColor¶added inv1.4.0
func (p *LogFormatterParams) ResetColor()string
ResetColor resets all escape attributes.
func (*LogFormatterParams)StatusCodeColor¶added inv1.4.0
func (p *LogFormatterParams) StatusCodeColor()string
StatusCodeColor is the ANSI color for appropriately logging http status code to a terminal.
typeLoggerConfig¶added inv1.4.0
type LoggerConfig struct {// Optional. Default value is gin.defaultLogFormatterFormatterLogFormatter// Output is a writer where logs are written.// Optional. Default value is gin.DefaultWriter.Outputio.Writer// SkipPaths is a URL path array which logs are not written.// Optional.SkipPaths []string// Skip is a Skipper that indicates which logs should not be written.// Optional.SkipSkipper}
LoggerConfig defines the config for Logger middleware.
typeNegotiate¶
type Negotiate struct {Offered []stringHTMLNamestringHTMLDataanyJSONDataanyXMLDataanyYAMLDataanyDataanyTOMLDataany}
Negotiate contains all negotiations data.
typeOnlyFilesFS¶added inv1.11.0
type OnlyFilesFS struct {FileSystemhttp.FileSystem}
OnlyFilesFS implements an http.FileSystem without `Readdir` functionality.
typeOptionFunc¶added inv1.10.0
type OptionFunc func(*Engine)
OptionFunc defines the function to change the default configuration
typeParams¶
type Params []Param
Params is a Param-slice, as returned by the router.The slice is ordered, the first URL parameter is also the first slice value.It is therefore safe to read values by the index.
typeRecoveryFunc¶added inv1.7.0
RecoveryFunc defines the function passable to CustomRecovery.
typeResponseWriter¶
type ResponseWriter interface {http.ResponseWriterhttp.Hijackerhttp.Flusherhttp.CloseNotifier// Status returns the HTTP response status code of the current request.Status()int// Size returns the number of bytes already written into the response http body.// See Written()Size()int// WriteString writes the string into the response body.WriteString(string) (int,error)// Written returns true if the response body was already written.Written()bool// WriteHeaderNow forces to write the http header (status code + headers).WriteHeaderNow()// Pusher get the http.Pusher for server pushPusher()http.Pusher}
ResponseWriter ...
typeRouteInfo¶
type RouteInfo struct {MethodstringPathstringHandlerstringHandlerFuncHandlerFunc}
RouteInfo represents a request route's specification which contains method and path and its handler.
typeRouterGroup¶
type RouterGroup struct {HandlersHandlersChain// contains filtered or unexported fields}
RouterGroup is used internally to configure router, a RouterGroup is associated witha prefix and an array of handlers (middleware).
func (*RouterGroup)Any¶
func (group *RouterGroup) Any(relativePathstring, handlers ...HandlerFunc)IRoutes
Any registers a route that matches all the HTTP methods.GET, POST, PUT, PATCH, HEAD, OPTIONS, DELETE, CONNECT, TRACE.
func (*RouterGroup)BasePath¶
func (group *RouterGroup) BasePath()string
BasePath returns the base path of router group.For example, if v := router.Group("/rest/n/v1/api"), v.BasePath() is "/rest/n/v1/api".
func (*RouterGroup)DELETE¶
func (group *RouterGroup) DELETE(relativePathstring, handlers ...HandlerFunc)IRoutes
DELETE is a shortcut for router.Handle("DELETE", path, handlers).
func (*RouterGroup)GET¶
func (group *RouterGroup) GET(relativePathstring, handlers ...HandlerFunc)IRoutes
GET is a shortcut for router.Handle("GET", path, handlers).
func (*RouterGroup)Group¶
func (group *RouterGroup) Group(relativePathstring, handlers ...HandlerFunc) *RouterGroup
Group creates a new router group. You should add all the routes that have common middlewares or the same path prefix.For example, all the routes that use a common middleware for authorization could be grouped.
func (*RouterGroup)HEAD¶
func (group *RouterGroup) HEAD(relativePathstring, handlers ...HandlerFunc)IRoutes
HEAD is a shortcut for router.Handle("HEAD", path, handlers).
func (*RouterGroup)Handle¶
func (group *RouterGroup) Handle(httpMethod, relativePathstring, handlers ...HandlerFunc)IRoutes
Handle registers a new request handle and middleware with the given path and method.The last handler should be the real handler, the other ones should be middleware that can and should be shared among different routes.See the example code in GitHub.
For GET, POST, PUT, PATCH and DELETE requests the respective shortcutfunctions can be used.
This function is intended for bulk loading and to allow the usage of lessfrequently used, non-standardized or custom methods (e.g. for internalcommunication with a proxy).
func (*RouterGroup)Match¶added inv1.9.0
func (group *RouterGroup) Match(methods []string, relativePathstring, handlers ...HandlerFunc)IRoutes
Match registers a route that matches the specified methods that you declared.
func (*RouterGroup)OPTIONS¶
func (group *RouterGroup) OPTIONS(relativePathstring, handlers ...HandlerFunc)IRoutes
OPTIONS is a shortcut for router.Handle("OPTIONS", path, handlers).
func (*RouterGroup)PATCH¶
func (group *RouterGroup) PATCH(relativePathstring, handlers ...HandlerFunc)IRoutes
PATCH is a shortcut for router.Handle("PATCH", path, handlers).
func (*RouterGroup)POST¶
func (group *RouterGroup) POST(relativePathstring, handlers ...HandlerFunc)IRoutes
POST is a shortcut for router.Handle("POST", path, handlers).
func (*RouterGroup)PUT¶
func (group *RouterGroup) PUT(relativePathstring, handlers ...HandlerFunc)IRoutes
PUT is a shortcut for router.Handle("PUT", path, handlers).
func (*RouterGroup)Static¶
func (group *RouterGroup) Static(relativePath, rootstring)IRoutes
Static serves files from the given file system root.Internally a http.FileServer is used, therefore http.NotFound is used insteadof the Router's NotFound handler.To use the operating system's file system implementation,use :
router.Static("/static", "/var/www")
func (*RouterGroup)StaticFS¶
func (group *RouterGroup) StaticFS(relativePathstring, fshttp.FileSystem)IRoutes
StaticFS works just like `Static()` but a custom `http.FileSystem` can be used instead.Gin by default uses: gin.Dir()
func (*RouterGroup)StaticFile¶
func (group *RouterGroup) StaticFile(relativePath, filepathstring)IRoutes
StaticFile registers a single route in order to serve a single file of the local filesystem.router.StaticFile("favicon.ico", "./resources/favicon.ico")
func (*RouterGroup)StaticFileFS¶added inv1.8.0
func (group *RouterGroup) StaticFileFS(relativePath, filepathstring, fshttp.FileSystem)IRoutes
StaticFileFS works just like `StaticFile` but a custom `http.FileSystem` can be used instead..router.StaticFileFS("favicon.ico", "./resources/favicon.ico", Dir{".", false})Gin by default uses: gin.Dir()
func (*RouterGroup)Use¶
func (group *RouterGroup) Use(middleware ...HandlerFunc)IRoutes
Use adds middleware to the group, see example code in GitHub.