Root

github.com/gin-gonic/gin

Package gin implements a HTTP web framework called gin.

import "github.com/gin-gonic/gin"

Package gin implements a HTTP web framework called gin.

See https://gin-gonic.com/ for more information about gin.

Example:

package main

import "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
}

Constants

Content-Type MIME of the most common data formats.

Source: context.go:32

const (
	MIMEJSON              = binding.MIMEJSON
	MIMEHTML              = binding.MIMEHTML
	MIMEXML               = binding.MIMEXML
	MIMEXML2              = binding.MIMEXML2
	MIMEPlain             = binding.MIMEPlain
	MIMEPOSTForm          = binding.MIMEPOSTForm
	MIMEMultipartPOSTForm = binding.MIMEMultipartPOSTForm
	MIMEYAML              = binding.MIMEYAML
	MIMEYAML2             = binding.MIMEYAML2
	MIMETOML              = binding.MIMETOML
	MIMEPROTOBUF          = binding.MIMEPROTOBUF
	MIMEBSON              = binding.MIMEBSON
)

Trusted platforms

Source: gin.go:89

const (
	// PlatformGoogleAppEngine when running on Google App Engine. Trust X-Appengine-Remote-Addr
	// for determining the client's IP
	PlatformGoogleAppEngine = "X-Appengine-Remote-Addr"
	// PlatformCloudflare when using Cloudflare's CDN. Trust CF-Connecting-IP for determining
	// the client's IP
	PlatformCloudflare = "CF-Connecting-IP"
	// PlatformFlyIO when running on Fly.io. Trust Fly-Client-IP for determining the client's IP
	PlatformFlyIO = "Fly-Client-IP"
)

Source: mode.go:21

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"
)

AuthProxyUserKey is the cookie name for proxy_user credential in basic auth for proxy.

Source: auth.go:20

const AuthProxyUserKey = "proxy_user"

AuthUserKey is the cookie name for user credential in basic auth.

Source: auth.go:17

const AuthUserKey = "user"

BindKey indicates a default bind key.

Source: utils.go:20

const BindKey = "_gin-gonic/gin/bindkey"

BodyBytesKey indicates a default body bytes key.

Source: context.go:47

const BodyBytesKey = "_gin-gonic/gin/bodybyteskey"

ContextKey is the key that a Context returns itself for.

Source: context.go:50

const ContextKey = "_gin-gonic/gin/contextkey"

EnvGinMode indicates environment name for gin mode.

Source: mode.go:17

const EnvGinMode = "GIN_MODE"

MethodQuery is the HTTP QUERY method defined by RFC 10008. It is declared here because the standard library does not provide http.MethodQuery yet. Once it does, this constant keeps the same value and stays valid.

Source: routergroup.go:17

const MethodQuery = "QUERY"

Version is the current gin framework's version.

Source: version.go:8

const Version = "v1.12.0"

Source: context.go:54

const ContextRequestKey ContextKeyType = 0

Source: errors.go:20

const (
	// ErrorTypeBind is used when Context.Bind() fails.
	ErrorTypeBind ErrorType = 1 << 63
	// ErrorTypeRender is used when Context.Render() fails.
	ErrorTypeRender ErrorType = 1 << 62
	// ErrorTypePrivate indicates a private error.
	ErrorTypePrivate ErrorType = 1 << 0
	// ErrorTypePublic indicates a public error.
	ErrorTypePublic ErrorType = 1 << 1
	// ErrorTypeAny indicates any other error.
	ErrorTypeAny ErrorType = 1<<64 - 1
)

Variables

DebugPrintFunc indicates debug log output format.

Source: debug.go:30

var DebugPrintFunc func(format string, values ...any)

DebugPrintRouteFunc indicates debug log output format.

Source: debug.go:27

var DebugPrintRouteFunc func(httpMethod, absolutePath, handlerName string, nuHandlers int)

DefaultErrorWriter is the default io.Writer used by Gin to debug errors

Source: mode.go:45

var DefaultErrorWriter io.Writer = os.Stderr

DefaultWriter is the default io.Writer used by Gin for debug output and middleware output like Logger() or Recovery(). Note that both Logger and Recovery provides custom ways to configure their output io.Writer. To support coloring in Windows use:

import "github.com/mattn/go-colorable"
gin.DefaultWriter = colorable.NewColorableStdout()

Source: mode.go:42

var DefaultWriter io.Writer = os.Stdout

Functions

func BasicAuth(accounts Accounts) HandlerFunc

Source: auth.go:72

BasicAuth returns a Basic HTTP Authorization middleware. It takes as argument a map[string]string where the key is the user name and the value is the password.

func BasicAuthForProxy(accounts Accounts, realm string) HandlerFunc

Source: auth.go:98

BasicAuthForProxy returns a Basic HTTP Proxy-Authorization middleware. If the realm is empty, "Proxy Authorization Required" will be used by default.

func BasicAuthForRealm(accounts Accounts, realm string) HandlerFunc

Source: auth.go:48

BasicAuthForRealm returns a Basic HTTP Authorization middleware. It takes as arguments a map[string]string where the 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. (see http://tools.ietf.org/html/rfc2617#section-1.2)

func Bind(val any) HandlerFunc

Source: utils.go:30

Bind is a helper function for given interface object and returns a Gin middleware. It panics if val is a pointer; pass the struct value directly (e.g., gin.Bind(Struct{}) not gin.Bind(&Struct{})).

func CreateTestContext(w http.ResponseWriter) (c *Context, r *Engine)

Source: test_helpers.go:17

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 instance along with a context, for example, to test middleware that doesn't depend on specific routes. The ResponseWriter w is used to initialize the context's writer.

func CreateTestContextOnly(w http.ResponseWriter, r *Engine) (c *Context)

Source: test_helpers.go:30

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 CustomRecovery(handle RecoveryFunc) HandlerFunc

Source: recovery.go:40

CustomRecovery returns a middleware that recovers from any panics and calls the provided handle func to handle it.

func CustomRecoveryWithWriter(out io.Writer, handle RecoveryFunc) HandlerFunc

Source: recovery.go:53

CustomRecoveryWithWriter returns a middleware for a given writer that recovers from any panics and calls the provided handle func to handle it.

func Default(opts ...OptionFunc) *Engine

Source: gin.go:250

Default returns an Engine instance with the Logger and Recovery middleware already attached.

func Dir(root string, listDirectory bool) http.FileSystem

Source: fs.go:42

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.

func DisableBindValidation()

Source: mode.go:81

DisableBindValidation closes the default validator.

func DisableConsoleColor()

Source: logger.go:197

DisableConsoleColor disables color output in the console.

func EnableJsonDecoderDisallowUnknownFields()

Source: mode.go:93

EnableJsonDecoderDisallowUnknownFields sets true for binding.EnableDecoderDisallowUnknownFields to call the DisallowUnknownFields method on the JSON Decoder instance.

func EnableJsonDecoderUseNumber()

Source: mode.go:87

EnableJsonDecoderUseNumber sets true for binding.EnableDecoderUseNumber to call the UseNumber method on the JSON Decoder instance.

func ErrorLogger() HandlerFunc

Source: logger.go:207

ErrorLogger returns a HandlerFunc for any error type.

func ErrorLoggerT(typ ErrorType) HandlerFunc

Source: logger.go:212

ErrorLoggerT returns a HandlerFunc for a given error type.

func ForceConsoleColor()

Source: logger.go:202

ForceConsoleColor force color output in the console.

func IsDebugging() bool

Source: debug.go:22

IsDebugging returns true if the framework is running in debug mode. Use SetMode(gin.ReleaseMode) to disable debug mode.

func Logger() HandlerFunc

Source: logger.go:224

Logger instances a Logger middleware that will write the logs to gin.DefaultWriter. By default, gin.DefaultWriter = os.Stdout.

func LoggerWithConfig(conf LoggerConfig) HandlerFunc

Source: logger.go:245

LoggerWithConfig instance a Logger middleware with config.

func LoggerWithFormatter(f LogFormatter) HandlerFunc

Source: logger.go:229

LoggerWithFormatter instance a Logger middleware with the specified log format function.

func LoggerWithWriter(out io.Writer, notlogged ...string) HandlerFunc

Source: logger.go:237

LoggerWithWriter instance a Logger middleware with the specified writer buffer. Example: os.Stdout, a file opened in write mode, a socket...

func Mode() string

Source: mode.go:98

Mode returns current gin mode.

func New(opts ...OptionFunc) *Engine

Source: gin.go:215

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
  • UseEscapedPath: false
  • UnescapePathValues: true

func Recovery() HandlerFunc

Source: recovery.go:35

Recovery returns a middleware that recovers from any panics and writes a 500 if there was one.

func RecoveryWithWriter(out io.Writer, recovery ...RecoveryFunc) HandlerFunc

Source: recovery.go:45

RecoveryWithWriter returns a middleware for a given writer that recovers from any panics and writes a 500 if there was one.

func SetMode(value string)

Source: mode.go:58

SetMode sets gin mode according to input string.

func WrapF(f http.HandlerFunc) HandlerFunc

Source: utils.go:48

WrapF is a helper function for wrapping http.HandlerFunc and returns a Gin middleware.

func WrapH(h http.Handler) HandlerFunc

Source: utils.go:55

WrapH is a helper function for wrapping http.Handler and returns a Gin middleware.

Types

type Accounts

Source: auth.go:23

Accounts defines a key/value for user/pass list of authorized logins.

type Accounts map[string]string

type Context

Source: context.go:61

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.

type Context struct {
	Request *http.Request
	Writer  ResponseWriter

	Params Params

	// 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
}
Fields
  • Request *http.Request
  • Writer ResponseWriter
  • Params Params
  • Keys map[any]any

    Keys is a key/value pair exclusively for the context of each request.

  • Errors errorMsgs

    Errors is a list of errors attached to all the handlers/middlewares who used this context.

  • Accepted []string

    Accepted defines a list of manually accepted formats for content negotiation.

func Abort()

Source: context.go:216

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 handlers for this request are not called.

func AbortWithError(code int, err error) *Error

Source: context.go:247

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 AbortWithStatus(code int)

Source: context.go:222

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 AbortWithStatusJSON(code int, jsonObj any)

Source: context.go:239

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 AbortWithStatusPureJSON(code int, jsonObj any)

Source: context.go:231

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 AddParam(key, value string)

Source: context.go:521

AddParam adds param to context and replaces path param key with given value for e2e testing purposes Example Route: "/user/:id" AddParam("id", 1) Result: "/user/1"

func AsciiJSON(code int, obj any)

Source: context.go:1265

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 BSON(code int, obj any)

Source: context.go:1303

BSON serializes the given struct as BSON into the response body.

func Bind(obj any) error

Source: context.go:779

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 based on the Content-Type (e.g., JSON or XML). It decodes the 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 BindHeader(obj any) error

Source: context.go:815

BindHeader is a shortcut for c.MustBindWith(obj, binding.Header).

func BindJSON(obj any) error

Source: context.go:785

BindJSON is a shortcut for c.MustBindWith(obj, binding.JSON).

func BindPlain(obj any) error

Source: context.go:810

BindPlain is a shortcut for c.MustBindWith(obj, binding.Plain).

func BindQuery(obj any) error

Source: context.go:795

BindQuery is a shortcut for c.MustBindWith(obj, binding.Query).

func BindTOML(obj any) error

Source: context.go:805

BindTOML is a shortcut for c.MustBindWith(obj, binding.TOML).

func BindUri(obj any) error

Source: context.go:821

BindUri binds the passed struct pointer using binding.Uri. It will abort the request with HTTP 400 if any error occurs.

func BindWith(obj any, b binding.Binding) error

Source: deprecated.go:17

BindWith binds the passed struct pointer using the specified binding engine. See the binding package.

Deprecated: Use MustBindWith or ShouldBindWith.

func BindXML(obj any) error

Source: context.go:790

BindXML is a shortcut for c.MustBindWith(obj, binding.XML).

func BindYAML(obj any) error

Source: context.go:800

BindYAML is a shortcut for c.MustBindWith(obj, binding.YAML).

func ClientIP() string

Source: context.go:997

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 ContentType() string

Source: context.go:1058

ContentType returns the Content-Type header of the request.

func Copy() *Context

Source: context.go:122

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 Data(code int, contentType string, data []byte)

Source: context.go:1322

Data writes some data into the body stream and updates the HTTP code.

func DataFromReader(code int, contentLength int64, contentType string, reader io.Reader, extraHeaders map[string]string)

Source: context.go:1330

DataFromReader writes the specified reader into the body stream and updates the HTTP code.

func Deadline() (deadline time.Time, ok bool)

Source: context.go:1501

Deadline returns that there is no deadline (ok==false) when c.Request has no Context.

func DefaultPostForm(key, defaultValue string) string

Source: context.go:618

DefaultPostForm returns the specified key from a POST urlencoded form or multipart form when it exists, otherwise it returns the specified defaultValue string. See: PostForm() and GetPostForm() for further information.

func DefaultQuery(key, defaultValue string) string

Source: context.go:547

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 Delete(key any)

Source: context.go:491

Delete deletes the key from the Context's Key map, if it exists. This operation is safe to be used by concurrent go-routines

func Done() <-chan struct{}

Source: context.go:1509

Done returns nil (chan which will wait forever) when c.Request has no Context.

func Err() error

Source: context.go:1517

Err returns nil when c.Request has no Context.

func Error(err error) *Error

Source: context.go:261

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 File(filepath string)

Source: context.go:1340

File writes the specified file into the body stream in an efficient way.

func FileAttachment(filepath, filename string)

Source: context.go:1363

FileAttachment writes the specified file into the body stream in an efficient way On the client side, the file will typically be downloaded with the given filename

func FileFromFS(filepath string, fs http.FileSystem)

Source: context.go:1345

FileFromFS writes the specified file from http.FileSystem into the body stream in an efficient way.

func FormFile(name string) (*multipart.FileHeader, error)

Source: context.go:707

FormFile returns the first file for the provided form key.

func FullPath() string

Source: context.go:186

FullPath returns a matched route full path. For not found routes returns an empty string.

router.GET("/user/:id", func(c *gin.Context) {
    c.FullPath() == "/user/:id" // true
})

func Get(key any) (value any, exists bool)

Source: context.go:297

Get returns the value for the given key, ie: (value, true). If the value does not exist it returns (nil, false)

func GetBool(key any) bool

Source: context.go:325

GetBool returns the value associated with the key as a boolean.

func GetDuration(key any) time.Duration

Source: context.go:395

GetDuration returns the value associated with the key as a duration.

func GetError(key any) error

Source: context.go:400

GetError returns the value associated with the key as an error.

func GetErrorSlice(key any) []error

Source: context.go:470

GetErrorSlice returns the value associated with the key as a slice of errors.

func GetFloat32(key any) float32

Source: context.go:380

GetFloat32 returns the value associated with the key as a float32.

func GetFloat32Slice(key any) []float32

Source: context.go:455

GetFloat32Slice returns the value associated with the key as a slice of float32 numbers.

func GetFloat64(key any) float64

Source: context.go:385

GetFloat64 returns the value associated with the key as a float64.

func GetFloat64Slice(key any) []float64

Source: context.go:460

GetFloat64Slice returns the value associated with the key as a slice of float64 numbers.

func GetHeader(key string) string

Source: context.go:1138

GetHeader returns value from request headers.

func GetInt(key any) int

Source: context.go:330

GetInt returns the value associated with the key as an integer.

func GetInt16(key any) int16

Source: context.go:340

GetInt16 returns the value associated with the key as an integer 16.

func GetInt16Slice(key any) []int16

Source: context.go:415

GetInt16Slice returns the value associated with the key as a slice of int16 integers.

func GetInt32(key any) int32

Source: context.go:345

GetInt32 returns the value associated with the key as an integer 32.

func GetInt32Slice(key any) []int32

Source: context.go:420

GetInt32Slice returns the value associated with the key as a slice of int32 integers.

func GetInt64(key any) int64

Source: context.go:350

GetInt64 returns the value associated with the key as an integer 64.

func GetInt64Slice(key any) []int64

Source: context.go:425

GetInt64Slice returns the value associated with the key as a slice of int64 integers.

func GetInt8(key any) int8

Source: context.go:335

GetInt8 returns the value associated with the key as an integer 8.

func GetInt8Slice(key any) []int8

Source: context.go:410

GetInt8Slice returns the value associated with the key as a slice of int8 integers.

func GetIntSlice(key any) []int

Source: context.go:405

GetIntSlice returns the value associated with the key as a slice of integers.

func GetPostForm(key string) (string, bool)

Source: context.go:633

GetPostForm is like PostForm(key). It returns the specified key from a POST urlencoded form 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 GetPostFormArray(key string) (values []string, ok bool)

Source: context.go:662

GetPostFormArray returns a slice of strings for a given form key, plus a boolean value whether at least one value exists for the given key.

func GetPostFormMap(key string) (map[string]string, bool)

Source: context.go:676

GetPostFormMap returns a map for a given form key, plus a boolean value whether at least one value exists for the given key.

func GetQuery(key string) (string, bool)

Source: context.go:563

GetQuery is like Query(), it returns the keyed url query value if 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 GetQueryArray(key string) (values []string, ok bool)

Source: context.go:589

GetQueryArray returns a slice of strings for a given query key, plus a boolean value whether at least one value exists for the given key.

func GetQueryMap(key string) (map[string]string, bool)

Source: context.go:603

GetQueryMap returns a map for a given query key, plus a boolean value whether at least one value exists for the given key.

func GetRawData() ([]byte, error)

Source: context.go:1143

GetRawData returns stream data.

func GetString(key any) string

Source: context.go:320

GetString returns the value associated with the key as a string.

func GetStringMap(key any) map[string]any

Source: context.go:475

GetStringMap returns the value associated with the key as a map of interfaces.

func GetStringMapString(key any) map[string]string

Source: context.go:480

GetStringMapString returns the value associated with the key as a map of strings.

func GetStringMapStringSlice(key any) map[string][]string

Source: context.go:485

GetStringMapStringSlice returns the value associated with the key as a map to a slice of strings.

func GetStringSlice(key any) []string

Source: context.go:465

GetStringSlice returns the value associated with the key as a slice of strings.

func GetTime(key any) time.Time

Source: context.go:390

GetTime returns the value associated with the key as time.

func GetUint(key any) uint

Source: context.go:355

GetUint returns the value associated with the key as an unsigned integer.

func GetUint16(key any) uint16

Source: context.go:365

GetUint16 returns the value associated with the key as an unsigned integer 16.

func GetUint16Slice(key any) []uint16

Source: context.go:440

GetUint16Slice returns the value associated with the key as a slice of uint16 integers.

func GetUint32(key any) uint32

Source: context.go:370

GetUint32 returns the value associated with the key as an unsigned integer 32.

func GetUint32Slice(key any) []uint32

Source: context.go:445

GetUint32Slice returns the value associated with the key as a slice of uint32 integers.

func GetUint64(key any) uint64

Source: context.go:375

GetUint64 returns the value associated with the key as an unsigned integer 64.

func GetUint64Slice(key any) []uint64

Source: context.go:450

GetUint64Slice returns the value associated with the key as a slice of uint64 integers.

func GetUint8(key any) uint8

Source: context.go:360

GetUint8 returns the value associated with the key as an unsigned integer 8.

func GetUint8Slice(key any) []uint8

Source: context.go:435

GetUint8Slice returns the value associated with the key as a slice of uint8 integers.

func GetUintSlice(key any) []uint

Source: context.go:430

GetUintSlice returns the value associated with the key as a slice of unsigned integers.

func HTML(code int, name string, obj any)

Source: context.go:1220

HTML renders the HTTP template specified by its file name. It also updates the HTTP code and sets the Content-Type as "text/html". See http://golang.org/doc/articles/wiki/

func Handler() HandlerFunc

Source: context.go:176

Handler returns the main handler.

func HandlerName() string

Source: context.go:158

HandlerName returns the main handler's name. For example if the handler is "handleGetUsers()", this function will return "main.handleGetUsers".

func HandlerNames() []string

Source: context.go:164

HandlerNames returns a list of all registered handlers for this context in descending order, following the semantics of HandlerName()

func Header(key, value string)

Source: context.go:1129

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 IndentedJSON(code int, obj any)

Source: context.go:1234

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 is more CPU and bandwidth consuming. Use Context.JSON() instead.

func IsAborted() bool

Source: context.go:208

IsAborted returns true if the current context was aborted.

func IsWebsocket() bool

Source: context.go:1064

IsWebsocket returns true if the request headers indicate that a websocket handshake is being initiated by the client.

func JSON(code int, obj any)

Source: context.go:1259

JSON serializes the given struct as JSON into the response body. It also sets the Content-Type as "application/json".

func JSONP(code int, obj any)

Source: context.go:1248

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 MultipartForm() (*multipart.Form, error)

Source: context.go:722

MultipartForm is the parsed multipart form, including file uploads.

func MustBindWith(obj any, b binding.Binding) error

Source: context.go:832

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 MustGet(key any) any

Source: context.go:305

MustGet returns the value for the given key if it exists, otherwise it panics.

func Negotiate(code int, config Negotiate)

Source: context.go:1418

Negotiate calls different Render according to acceptable Accept format.

func NegotiateFormat(offered ...string) string

Source: context.go:1454

NegotiateFormat returns an acceptable Accept format.

func Next()

Source: context.go:197

Next should be used only inside middleware. It executes the pending handlers in the chain inside the calling handler. See example in GitHub.

func PDF(code int, data []byte)

Source: context.go:1283

PDF writes the given PDF binary data into the response body. It also sets the Content-Type as "application/pdf".

func Param(key string) string

Source: context.go:512

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 PostForm(key string) (value string)

Source: context.go:610

PostForm returns the specified key from a POST urlencoded form or multipart form when it exists, otherwise it returns an empty string ("").

func PostFormArray(key string) (values []string)

Source: context.go:642

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 PostFormMap(key string) (dicts map[string]string)

Source: context.go:669

PostFormMap returns a map for a given form key.

func ProtoBuf(code int, obj any)

Source: context.go:1298

ProtoBuf serializes the given struct as ProtoBuf into the response body.

func PureJSON(code int, obj any)

Source: context.go:1271

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 Query(key string) (value string)

Source: context.go:534

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 QueryArray(key string) (values []string)

Source: context.go:572

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 QueryMap(key string) (dicts map[string]string)

Source: context.go:596

QueryMap returns a map for a given query key.

func Redirect(code int, location string)

Source: context.go:1313

Redirect returns an HTTP redirect to the specific location.

func RemoteIP() string

Source: context.go:1049

RemoteIP parses the IP from Request.RemoteAddr, normalizes and returns the IP (without the port).

func Render(code int, r render.Render)

Source: context.go:1201

Render writes the response headers and calls render.Render to render data.

func SSEvent(name string, message any)

Source: context.go:1373

SSEvent writes a Server-Sent Event into the body stream.

func SaveUploadedFile(file *multipart.FileHeader, dst string, perm ...fs.FileMode) error

Source: context.go:733

SaveUploadedFile uploads the form file to specific dst. An optional perm argument specifies the permission bits used when creating the destination directory. If not provided, the default is 0750. The exact permission is enforced only on the destination directory and only when it is newly created by this call; pre-existing directories (e.g. /tmp) are not modified.

func Scheme() string

Source: context.go:1077

Scheme returns the HTTP scheme of the request ("http" or "https"). When running behind reverse proxies or load balancers Request.URL.Scheme is usually empty. the original scheme is commonly forwarded via headers such as X-Forwarded-Proto. Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto

func SecureJSON(code int, obj any)

Source: context.go:1241

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 Set(key any, value any)

Source: context.go:285

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 SetAccepted(formats ...string)

Source: context.go:1485

SetAccepted sets Accept header data.

func SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)

Source: context.go:1158

SetCookie adds a Set-Cookie header to the ResponseWriter's headers. The provided cookie must have a valid Name. Invalid cookies may be silently dropped.

func SetCookieData(cookie *http.Cookie)

Source: context.go:1177

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 SetSameSite(samesite http.SameSite)

Source: context.go:1151

SetSameSite with cookie

func ShouldBind(obj any) error

Source: context.go:860

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 based on the Content-Type (e.g., JSON or XML). It decodes the 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 ShouldBindBodyWith(obj any, bb binding.BindingBody) (err error)

Source: context.go:950

ShouldBindBodyWith is similar with ShouldBindWith, but it stores the request body into the context, and reuse when it is called again.

NOTE: This method reads the body before binding. So you should use ShouldBindWith for better performance if you need to call only once.

func ShouldBindBodyWithJSON(obj any) error

Source: context.go:968

ShouldBindBodyWithJSON is a shortcut for c.ShouldBindBodyWith(obj, binding.JSON).

func ShouldBindBodyWithPlain(obj any) error

Source: context.go:988

ShouldBindBodyWithPlain is a shortcut for c.ShouldBindBodyWith(obj, binding.Plain).

func ShouldBindBodyWithTOML(obj any) error

Source: context.go:983

ShouldBindBodyWithTOML is a shortcut for c.ShouldBindBodyWith(obj, binding.TOML).

func ShouldBindBodyWithXML(obj any) error

Source: context.go:973

ShouldBindBodyWithXML is a shortcut for c.ShouldBindBodyWith(obj, binding.XML).

func ShouldBindBodyWithYAML(obj any) error

Source: context.go:978

ShouldBindBodyWithYAML is a shortcut for c.ShouldBindBodyWith(obj, binding.YAML).

func ShouldBindHeader(obj any) error

Source: context.go:925

ShouldBindHeader is a shortcut for c.ShouldBindWith(obj, binding.Header). It works like ShouldBindJSON but binds values from HTTP headers.

func ShouldBindJSON(obj any) error

Source: context.go:889

ShouldBindJSON is a shortcut for c.ShouldBindWith(obj, binding.JSON).

Example:

POST /user
Content-Type: application/json

Request Body:
{
	"name": "Manu",
	"age": 20
}

type User struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

var user User
if err := c.ShouldBindJSON(&user); err != nil {
	c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
	return
}
c.JSON(http.StatusOK, user)

func ShouldBindPlain(obj any) error

Source: context.go:919

ShouldBindPlain is a shortcut for c.ShouldBindWith(obj, binding.Plain). It works like ShouldBindJSON but binds plain text data from the request body.

func ShouldBindQuery(obj any) error

Source: context.go:901

ShouldBindQuery is a shortcut for c.ShouldBindWith(obj, binding.Query). It works like ShouldBindJSON but binds query parameters from the URL.

func ShouldBindTOML(obj any) error

Source: context.go:913

ShouldBindTOML is a shortcut for c.ShouldBindWith(obj, binding.TOML). It works like ShouldBindJSON but binds the request body as TOML data.

func ShouldBindUri(obj any) error

Source: context.go:931

ShouldBindUri binds the passed struct pointer using the specified binding engine. It works like ShouldBindJSON but binds parameters from the URI.

func ShouldBindWith(obj any, b binding.Binding) error

Source: context.go:941

ShouldBindWith binds the passed struct pointer using the specified binding engine. See the binding package.

func ShouldBindXML(obj any) error

Source: context.go:895

ShouldBindXML is a shortcut for c.ShouldBindWith(obj, binding.XML). It works like ShouldBindJSON but binds the request body as XML data.

func ShouldBindYAML(obj any) error

Source: context.go:907

ShouldBindYAML is a shortcut for c.ShouldBindWith(obj, binding.YAML). It works like ShouldBindJSON but binds the request body as YAML data.

func Status(code int)

Source: context.go:1122

Status sets the HTTP response code.

func Stream(step func(w io.Writer) bool) bool

Source: context.go:1382

Stream sends a streaming response and returns a boolean indicates "Is client disconnected in middle of stream"

func String(code int, format string, values ...any)

Source: context.go:1308

String writes the given string into the response body.

func TOML(code int, obj any)

Source: context.go:1293

TOML serializes the given struct as TOML into the response body.

func Value(key any) any

Source: context.go:1527

Value returns the value associated with this context for key, or nil if no value is associated with key. Successive calls to Value with the same key returns the same result.

func XML(code int, obj any)

Source: context.go:1277

XML serializes the given struct as XML into the response body. It also sets the Content-Type as "application/xml".

func YAML(code int, obj any)

Source: context.go:1288

YAML serializes the given struct as YAML into the response body.

type ContextKeyType

Source: context.go:52

type ContextKeyType int

type Engine

Source: gin.go:99

Engine is the framework's instance, it contains the muxer, middleware and configuration settings. Create an instance of Engine, by using New() or Default()

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.
	RedirectTrailingSlash bool

	// 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.
	RedirectFixedPath bool

	// 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.
	HandleMethodNotAllowed bool

	// 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`.
	ForwardedByClientIP bool

	// 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.
	AppEngine bool

	// UseRawPath if enabled, the url.RawPath will be used to find parameters.
	// The RawPath is only a hint, EscapedPath() should be use instead. (https://pkg.go.dev/net/url@master#URL)
	// Only use RawPath if you know what you are doing.
	UseRawPath bool

	// UseEscapedPath if enable, the url.EscapedPath() will be used to find parameters
	// It overrides UseRawPath
	UseEscapedPath bool

	// UnescapePathValues if true, the path value will be unescaped.
	// If UseRawPath and UseEscapedPath are false (by default), the UnescapePathValues effectively is true,
	// as url.Path gonna be used, which is already unescaped.
	UnescapePathValues bool

	// RemoveExtraSlash a parameter can be parsed from the URL even with extra slashes.
	// See the PR #1817 and issue #1644
	RemoveExtraSlash bool

	// 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 IP
	TrustedPlatform string

	// MaxMultipartMemory value of 'maxMemory' param that is given to http.Request's ParseMultipartForm
	// method call.
	MaxMultipartMemory int64

	// ReadHeaderTimeout is the maximum duration allowed for reading the request
	// headers by the http.Server created through Run, RunTLS and RunListener.
	// If zero or negative, a default of 10 seconds is used. Set to a positive
	// value to customize, or use a custom http.Server directly to disable it.
	ReadHeaderTimeout time.Duration

	// UseH2C enable h2c support.
	UseH2C bool

	// ContextWithFallback enable fallback Context.Deadline(), Context.Done(), Context.Err() and Context.Value() when Context.Request.Context() is not nil.
	ContextWithFallback bool

	HTMLRender render.HTMLRender
	FuncMap    template.FuncMap
	// contains filtered or unexported fields
}
Fields
  • RouterGroup
  • RedirectTrailingSlash bool

    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.

  • RedirectFixedPath bool

    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.

  • HandleMethodNotAllowed bool

    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.

  • ForwardedByClientIP bool

    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.

  • AppEngine bool

    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.

  • UseRawPath bool

    UseRawPath if enabled, the url.RawPath will be used to find parameters. The RawPath is only a hint, EscapedPath() should be use instead. (https://pkg.go.dev/net/url@master#URL) Only use RawPath if you know what you are doing.

  • UseEscapedPath bool

    UseEscapedPath if enable, the url.EscapedPath() will be used to find parameters It overrides UseRawPath

  • UnescapePathValues bool

    UnescapePathValues if true, the path value will be unescaped. If UseRawPath and UseEscapedPath are false (by default), the UnescapePathValues effectively is true, as url.Path gonna be used, which is already unescaped.

  • RemoveExtraSlash bool

    RemoveExtraSlash a parameter can be parsed from the URL even with extra slashes. See the PR #1817 and issue #1644

  • RemoteIPHeaders []string

    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().

  • TrustedPlatform string

    TrustedPlatform if set to a constant of value gin.Platform*, trusts the headers set by that platform, for example to determine the client IP

  • MaxMultipartMemory int64

    MaxMultipartMemory value of 'maxMemory' param that is given to http.Request's ParseMultipartForm method call.

  • ReadHeaderTimeout time.Duration

    ReadHeaderTimeout is the maximum duration allowed for reading the request headers by the http.Server created through Run, RunTLS and RunListener. If zero or negative, a default of 10 seconds is used. Set to a positive value to customize, or use a custom http.Server directly to disable it.

  • UseH2C bool

    UseH2C enable h2c support.

  • ContextWithFallback bool

    ContextWithFallback enable fallback Context.Deadline(), Context.Done(), Context.Err() and Context.Value() when Context.Request.Context() is not nil.

  • HTMLRender render.HTMLRender
  • FuncMap template.FuncMap

func Delims(left, right string) *Engine

Source: gin.go:282

Delims sets template left and right delims and returns an Engine instance.

func HandleContext(c *Context)

Source: gin.go:709

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 Handler() http.Handler

Source: gin.go:257

func LoadHTMLFS(fs http.FileSystem, patterns ...string)

Source: gin.go:323

LoadHTMLFS loads an http.FileSystem and a slice of patterns and associates the result with HTML renderer.

func LoadHTMLFiles(files ...string)

Source: gin.go:311

LoadHTMLFiles loads a slice of HTML files and associates the result with HTML renderer.

func LoadHTMLGlob(pattern string)

Source: gin.go:295

LoadHTMLGlob loads HTML files identified by glob pattern and associates the result with HTML renderer.

func NoMethod(handlers ...HandlerFunc)

Source: gin.go:355

NoMethod sets the handlers called when Engine.HandleMethodNotAllowed = true.

func NoRoute(handlers ...HandlerFunc)

Source: gin.go:349

NoRoute adds handlers for NoRoute. It returns a 404 code by default.

func Routes() (routes RoutesInfo)

Source: gin.go:413

Routes returns a slice of registered routes, including some useful information, such as: the http method, path, and the handler name.

func Run(addr ...string) (err error)

Source: gin.go:566

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. The created http.Server is configured with a default ReadHeaderTimeout of 10 seconds (configurable via Engine.ReadHeaderTimeout) to mitigate slowloris attacks. For full control over timeouts, create a custom http.Server and use ServeHTTP.

func RunFd(fd int) (err error)

Source: gin.go:635

RunFd attaches the router to a http.Server and starts listening and serving HTTP requests through the specified file descriptor. Note: this method will block the calling goroutine indefinitely unless an error happens.

func RunListener(listener net.Listener) (err error)

Source: gin.go:673

RunListener attaches the router to a http.Server and starts listening and serving HTTP requests through the specified net.Listener

func RunQUIC(addr, certFile, keyFile string) (err error)

Source: gin.go:658

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 RunTLS(addr, certFile, keyFile string) (err error)

Source: gin.go:588

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 RunUnix(file string) (err error)

Source: gin.go:609

RunUnix attaches the router to a http.Server and starts listening and serving HTTP requests through the specified unix socket (i.e. a file). Note: this method will block the calling goroutine indefinitely unless an error happens.

func SecureJsonPrefix(prefix string) *Engine

Source: gin.go:288

SecureJsonPrefix sets the secureJSONPrefix used in Context.SecureJSON.

func ServeHTTP(w http.ResponseWriter, req *http.Request)

Source: gin.go:691

ServeHTTP conforms to the http.Handler interface.

func SetFuncMap(funcMap template.FuncMap)

Source: gin.go:344

SetFuncMap sets the FuncMap used for template.FuncMap.

func SetHTMLTemplate(templ *template.Template)

Source: gin.go:335

SetHTMLTemplate associate a template with HTML renderer.

func SetTrustedProxies(trustedProxies []string) error

Source: gin.go:474

SetTrustedProxies set a list of network origins (IPv4 addresses, IPv4 CIDRs, IPv6 addresses or IPv6 CIDRs) from which to trust request's headers that contain alternative client IP when (*gin.Engine).ForwardedByClientIP is true. TrustedProxies feature is enabled by default, and it also trusts all proxies by default. If you want to disable this feature, use Engine.SetTrustedProxies(nil), then Context.ClientIP() will return the remote address directly.

func Use(middleware ...HandlerFunc) IRoutes

Source: gin.go:363

Use attaches a global middleware to the router. i.e. the middleware attached through Use() will be included 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 With(opts ...OptionFunc) *Engine

Source: gin.go:371

With returns an Engine with the configuration set in the OptionFunc.

type Error

Source: errors.go:32

Error represents a error's specification.

type Error struct {
	Err  error
	Type ErrorType
	Meta any
}
Fields
  • Err error
  • Type ErrorType
  • Meta any

func Error) Error() string

Source: errors.go:82

Error implements the error interface.

func IsType(flags ErrorType) bool

Source: errors.go:87

IsType judges one error.

func JSON() any

Source: errors.go:55

JSON creates a properly formatted JSON

func MarshalJSON() ([]byte, error)

Source: errors.go:77

MarshalJSON implements the json.Marshaller interface.

func SetMeta(data any) *Error

Source: errors.go:49

SetMeta sets the error's meta data.

func SetType(flags ErrorType) *Error

Source: errors.go:43

SetType sets the error's type.

func Unwrap() error

Source: errors.go:92

Unwrap returns the wrapped error, to allow interoperability with errors.Is(), errors.As() and errors.Unwrap()

type ErrorType

Source: errors.go:16

ErrorType is an unsigned 64-bit error code as defined in the gin spec.

type ErrorType uint64

type H

Source: utils.go:62

H is a shortcut for map[string]any

type H map[string]any

func MarshalXML(e *xml.Encoder, start xml.StartElement) error

Source: utils.go:65

MarshalXML allows type H to be used with xml.Marshal.

type HandlerFunc

Source: gin.go:58

HandlerFunc defines the handler used by gin middleware as return value.

type HandlerFunc func(*Context)

type HandlersChain

Source: gin.go:64

HandlersChain defines a HandlerFunc slice.

type HandlersChain []HandlerFunc

func Last() HandlerFunc

Source: gin.go:67

Last returns the last handler in the chain. i.e. the last handler is the main one.

type IQueryRoutes

Source: routergroup.go:70

IQueryRoutes defines the router handle interface for the HTTP QUERY method.

It is deliberately kept out of IRoutes: adding a method to IRoutes would break every type outside of Gin that implements it, such as test doubles and wrappers. Type assert when you only hold an IRoutes value:

if q, ok := routes.(gin.IQueryRoutes); ok {
	q.QUERY("/search", handler)
}

*gin.RouterGroup and *gin.Engine satisfy this interface, so the assertion is only needed when the concrete type has been erased.

type IQueryRoutes interface {
	QUERY(string, ...HandlerFunc) IRoutes
}
Methods
  • QUERY func(string, ...HandlerFunc) IRoutes

type IRouter

Source: routergroup.go:32

IRouter defines all router handle interface includes single and group router.

type IRouter interface {
	IRoutes
	Group(string, ...HandlerFunc) *RouterGroup
}
Methods
  • IRoutes
  • Group func(string, ...HandlerFunc) *RouterGroup

type IRoutes

Source: routergroup.go:38

IRoutes defines all router handle interface.

type IRoutes interface {
	Use(...HandlerFunc) IRoutes

	Handle(string, string, ...HandlerFunc) IRoutes
	Any(string, ...HandlerFunc) IRoutes
	GET(string, ...HandlerFunc) IRoutes
	POST(string, ...HandlerFunc) IRoutes
	DELETE(string, ...HandlerFunc) IRoutes
	PATCH(string, ...HandlerFunc) IRoutes
	PUT(string, ...HandlerFunc) IRoutes
	OPTIONS(string, ...HandlerFunc) IRoutes
	HEAD(string, ...HandlerFunc) IRoutes
	Match([]string, string, ...HandlerFunc) IRoutes

	StaticFile(string, string) IRoutes
	StaticFileFS(string, string, http.FileSystem) IRoutes
	Static(string, string) IRoutes
	StaticFS(string, http.FileSystem) IRoutes
}
Methods
  • Use func(...HandlerFunc) IRoutes
  • Handle func(string, string, ...HandlerFunc) IRoutes
  • Any func(string, ...HandlerFunc) IRoutes
  • GET func(string, ...HandlerFunc) IRoutes
  • POST func(string, ...HandlerFunc) IRoutes
  • DELETE func(string, ...HandlerFunc) IRoutes
  • PATCH func(string, ...HandlerFunc) IRoutes
  • PUT func(string, ...HandlerFunc) IRoutes
  • OPTIONS func(string, ...HandlerFunc) IRoutes
  • HEAD func(string, ...HandlerFunc) IRoutes
  • Match func([]string, string, ...HandlerFunc) IRoutes
  • StaticFile func(string, string) IRoutes
  • StaticFileFS func(string, string, http.FileSystem) IRoutes
  • Static func(string, string) IRoutes
  • StaticFS func(string, http.FileSystem) IRoutes

type LogFormatter

Source: logger.go:65

LogFormatter gives the signature of the formatter function passed to LoggerWithFormatter

type LogFormatter func(params LogFormatterParams) string

type LogFormatterParams

Source: logger.go:68

LogFormatterParams is the structure any formatter will be handed when time to log comes

type LogFormatterParams struct {
	Request *http.Request

	// TimeStamp shows the time after the server returns a response.
	TimeStamp time.Time
	// StatusCode is HTTP response code.
	StatusCode int
	// Latency is how much time the server cost to process a certain request.
	Latency time.Duration
	// ClientIP equals Context's ClientIP method.
	ClientIP string
	// Method is the HTTP method given to the request.
	Method string
	// Path is a path the client requests.
	Path string
	// ErrorMessage is set if error has occurred in processing the request.
	ErrorMessage string

	// BodySize is the size of the Response Body
	BodySize int
	// Keys are the keys set on the request's context.
	Keys map[any]any
	// contains filtered or unexported fields
}
Fields
  • Request *http.Request
  • TimeStamp time.Time

    TimeStamp shows the time after the server returns a response.

  • StatusCode int

    StatusCode is HTTP response code.

  • Latency time.Duration

    Latency is how much time the server cost to process a certain request.

  • ClientIP string

    ClientIP equals Context's ClientIP method.

  • Method string

    Method is the HTTP method given to the request.

  • Path string

    Path is a path the client requests.

  • ErrorMessage string

    ErrorMessage is set if error has occurred in processing the request.

  • BodySize int

    BodySize is the size of the Response Body

  • Keys map[any]any

    Keys are the keys set on the request's context.

func IsOutputColor() bool

Source: logger.go:162

IsOutputColor indicates whether can colors be outputted to the log.

func LatencyColor() string

Source: logger.go:112

LatencyColor is the ANSI color for latency

func MethodColor() string

Source: logger.go:133

MethodColor is the ANSI color for appropriately logging http method to a terminal.

func ResetColor() string

Source: logger.go:157

ResetColor resets all escape attributes.

func StatusCodeColor() string

Source: logger.go:94

StatusCodeColor is the ANSI color for appropriately logging http status code to a terminal.

type LoggerConfig

Source: logger.go:39

LoggerConfig defines the config for Logger middleware.

type LoggerConfig struct {
	// Optional. Default value is gin.defaultLogFormatter
	Formatter LogFormatter

	// Output is a writer where logs are written.
	// Optional. Default value is gin.DefaultWriter.
	Output io.Writer

	// SkipPaths is a URL path array which logs are not written.
	// Optional.
	SkipPaths []string

	// SkipQueryString indicates that query strings should not be written
	// for cases such as when API keys are passed via query strings.
	// Optional. Default value is false.
	SkipQueryString bool

	// Skip is a Skipper that indicates which logs should not be written.
	// Optional.
	Skip Skipper
}
Fields
  • Formatter LogFormatter

    Optional. Default value is gin.defaultLogFormatter

  • Output io.Writer

    Output is a writer where logs are written. Optional. Default value is gin.DefaultWriter.

  • SkipPaths []string

    SkipPaths is a URL path array which logs are not written. Optional.

  • SkipQueryString bool

    SkipQueryString indicates that query strings should not be written for cases such as when API keys are passed via query strings. Optional. Default value is false.

  • Skip Skipper

    Skip is a Skipper that indicates which logs should not be written. Optional.

type Negotiate

Source: context.go:1404

Negotiate contains all negotiations data.

type Negotiate struct {
	Offered      []string
	HTMLName     string
	HTMLData     any
	JSONData     any
	XMLData      any
	YAMLData     any
	Data         any
	TOMLData     any
	PROTOBUFData any
	BSONData     any
}
Fields
  • Offered []string
  • HTMLName string
  • HTMLData any
  • JSONData any
  • XMLData any
  • YAMLData any
  • Data any
  • TOMLData any
  • PROTOBUFData any
  • BSONData any

type OnlyFilesFS

Source: fs.go:13

OnlyFilesFS implements an http.FileSystem without Readdir functionality.

type OnlyFilesFS struct {
	FileSystem http.FileSystem
}
Fields
  • FileSystem http.FileSystem

func Open(name string) (http.File, error)

Source: fs.go:18

Open passes Open to the upstream implementation without Readdir functionality.

type OptionFunc

Source: gin.go:61

OptionFunc defines the function to change the default configuration

type OptionFunc func(*Engine)

type Param

Source: tree.go:17

Param is a single URL parameter, consisting of a key and a value.

type Param struct {
	Key   string
	Value string
}
Fields
  • Key string
  • Value string

type Params

Source: tree.go:25

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.

type Params []Param

func ByName(name string) (va string)

Source: tree.go:40

ByName returns the value of the first Param which key matches the given name. If no matching Param is found, an empty string is returned.

func Get(name string) (string, bool)

Source: tree.go:29

Get returns the value of the first Param which key matches the given name and a boolean true. If no matching Param is found, an empty string is returned and a boolean false .

type RecoveryFunc

Source: recovery.go:32

RecoveryFunc defines the function passable to CustomRecovery.

type RecoveryFunc func(c *Context, err any)

type ResponseWriter

Source: response_writer.go:23

ResponseWriter ...

type ResponseWriter interface {
	http.ResponseWriter
	http.Hijacker
	http.Flusher
	http.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 push
	Pusher() http.Pusher
}
Methods
  • http.ResponseWriter
  • http.Hijacker
  • http.Flusher
  • http.CloseNotifier
  • Status func() int

    Status returns the HTTP response status code of the current request.

  • Size func() int

    Size returns the number of bytes already written into the response http body. See Written()

  • WriteString func(string) (int, error)

    WriteString writes the string into the response body.

  • Written func() bool

    Written returns true if the response body was already written.

  • WriteHeaderNow func()

    WriteHeaderNow forces to write the http header (status code + headers).

  • Pusher func() http.Pusher

    Pusher get the http.Pusher for server push

type RouteInfo

Source: gin.go:75

RouteInfo represents a request route's specification which contains method and path and its handler.

type RouteInfo struct {
	Method      string
	Path        string
	Handler     string
	HandlerFunc HandlerFunc
}
Fields
  • Method string
  • Path string
  • Handler string
  • HandlerFunc HandlerFunc

type RouterGroup

Source: routergroup.go:76

RouterGroup is used internally to configure router, a RouterGroup is associated with a prefix and an array of handlers (middleware).

type RouterGroup struct {
	Handlers HandlersChain
	// contains filtered or unexported fields
}
Fields
  • Handlers HandlersChain

func Any(relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:182

Any registers a route that matches all the HTTP methods. GET, POST, PUT, PATCH, HEAD, OPTIONS, DELETE, CONNECT, TRACE, QUERY.

func BasePath() string

Source: routergroup.go:106

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 DELETE(relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:147

DELETE is a shortcut for router.Handle("DELETE", path, handlers).

func GET(relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:142

GET is a shortcut for router.Handle("GET", path, handlers).

func Group) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup

Source: routergroup.go:96

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 HEAD(relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:167

HEAD is a shortcut for router.Handle("HEAD", path, handlers).

func Handle(httpMethod, relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:129

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 shortcut functions can be used.

This function is intended for bulk loading and to allow the usage of less frequently used, non-standardized or custom methods (e.g. for internal communication with a proxy).

It panics if httpMethod is not a valid HTTP method (uppercase ASCII letters only).

func Match(methods []string, relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:191

Match registers a route that matches the specified methods that you declared.

func OPTIONS(relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:162

OPTIONS is a shortcut for router.Handle("OPTIONS", path, handlers).

func PATCH(relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:152

PATCH is a shortcut for router.Handle("PATCH", path, handlers).

func POST(relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:137

POST is a shortcut for router.Handle("POST", path, handlers).

func PUT(relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:157

PUT is a shortcut for router.Handle("PUT", path, handlers).

func QUERY(relativePath string, handlers ...HandlerFunc) IRoutes

Source: routergroup.go:176

QUERY is a shortcut for router.Handle("QUERY", path, handlers).

QUERY is the safe and idempotent method defined by RFC 10008 that carries its query in the request body. The body is read like any other body, for example with c.ShouldBindJSON.

func Static(relativePath, root string) IRoutes

Source: routergroup.go:232

Static serves files from the given file system root. Internally a http.FileServer is used, therefore http.NotFound is used instead of the Router's NotFound handler. To use the operating system's file system implementation, use :

router.Static("/static", "/var/www")

func StaticFS(relativePath string, fs http.FileSystem) IRoutes

Source: routergroup.go:239

StaticFS works just like Static() but a custom http.FileSystem can be used instead. Gin by default uses: gin.Dir() It panics if relativePath contains URL parameters (: or *).

func StaticFile(relativePath, filepath string) IRoutes

Source: routergroup.go:201

StaticFile registers a single route in order to serve a single file of the local filesystem. router.StaticFile("favicon.ico", "./resources/favicon.ico")

func StaticFileFS(relativePath, filepath string, fs http.FileSystem) IRoutes

Source: routergroup.go:210

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 Use(middleware ...HandlerFunc) IRoutes

Source: routergroup.go:89

Use adds middleware to the group, see example code in GitHub.

type RoutesInfo

Source: gin.go:83

RoutesInfo defines a RouteInfo slice.

type RoutesInfo []RouteInfo

type Skipper

Source: logger.go:62

Skipper is a function to skip logs based on provided Context

type Skipper func(c *Context) bool