Documentation ¶
Index ¶
- Constants
- Variables
- func Dir(root string, listDirectory bool) http.FileSystem
- func DisableBindValidation()
- 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) Bind(obj interface{}) error
- func (c *Context) BindJSON(obj interface{}) error
- func (c *Context) BindWith(obj interface{}, b binding.Binding) error
- func (c *Context) ClientIP() string
- func (c *Context) ContentType() string
- func (c *Context) Copy() *Context
- func (c *Context) Data(code int, contentType string, data []byte)
- 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) Get(key string) (value interface{}, exists bool)
- func (c *Context) HTML(code int, name string, obj interface{})
- func (c *Context) Header(key, value string)
- func (c *Context) IndentedJSON(code int, obj interface{})
- func (c *Context) IsAborted() bool
- func (c *Context) JSON(code int, obj interface{})
- func (c *Context) MustGet(key string) interface{}
- 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) (va string)
- func (c *Context) Query(key string) (va string)
- func (c *Context) Redirect(code int, location string)
- func (c *Context) Render(code int, r render.Render)
- func (c *Context) SSEvent(name string, message interface{})
- func (c *Context) Set(key string, value interface{})
- func (c *Context) SetAccepted(formats ...string)
- func (c *Context) Stream(step func(w io.Writer) bool)
- func (c *Context) String(code int, format string, values ...interface{})
- func (c *Context) Value(key interface{}) interface{}
- func (c *Context) XML(code int, obj interface{})
- type Engine
- 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) RunTLS(addr string, certFile string, keyFile string) (err error)
- func (engine *Engine) RunUnix(file string) (err error)
- func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request)
- func (engine *Engine) SetHTMLTemplate(templ *template.Template)
- func (engine *Engine) Use(middlewares ...HandlerFunc) routesInterface
- type Error
- type ErrorType
- type H
- type HandlerFunc
- func BasicAuth(accounts Accounts) HandlerFunc
- func BasicAuthForRealm(accounts Accounts, realm string) HandlerFunc
- func Bind(val interface{}) HandlerFunc
- func ErrorLogger() HandlerFunc
- func ErrorLoggerT(typ ErrorType) HandlerFunc
- func Logger() HandlerFunc
- func LoggerWithWriter(out io.Writer) HandlerFunc
- func Recovery() HandlerFunc
- func RecoveryWithWriter(out io.Writer) HandlerFunc
- func WrapF(f http.HandlerFunc) HandlerFunc
- func WrapH(h http.Handler) HandlerFunc
- type HandlersChain
- type Negotiate
- type Param
- type Params
- type ResponseWriter
- type RouteInfo
- type RouterGroup
- func (group *RouterGroup) Any(relativePath string, handlers ...HandlerFunc) routesInterface
- func (group *RouterGroup) DELETE(relativePath string, handlers ...HandlerFunc) routesInterface
- func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) routesInterface
- func (group *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup
- func (group *RouterGroup) HEAD(relativePath string, handlers ...HandlerFunc) routesInterface
- func (group *RouterGroup) Handle(httpMethod, relativePath string, handlers ...HandlerFunc) routesInterface
- func (group *RouterGroup) OPTIONS(relativePath string, handlers ...HandlerFunc) routesInterface
- func (group *RouterGroup) PATCH(relativePath string, handlers ...HandlerFunc) routesInterface
- func (group *RouterGroup) POST(relativePath string, handlers ...HandlerFunc) routesInterface
- func (group *RouterGroup) PUT(relativePath string, handlers ...HandlerFunc) routesInterface
- func (group *RouterGroup) Static(relativePath, root string) routesInterface
- func (group *RouterGroup) StaticFS(relativePath string, fs http.FileSystem) routesInterface
- func (group *RouterGroup) StaticFile(relativePath, filepath string) routesInterface
- func (group *RouterGroup) Use(middlewares ...HandlerFunc) routesInterface
- type RoutesInfo
Constants ¶
const ( MIMEJSON = binding.MIMEJSON MIMEHTML = binding.MIMEHTML MIMEXML = binding.MIMEXML MIMEXML2 = binding.MIMEXML2 MIMEPlain = binding.MIMEPlain MIMEPOSTForm = binding.MIMEPOSTForm MIMEMultipartPOSTForm = binding.MIMEMultipartPOSTForm )
const ( DebugMode string = "debug" ReleaseMode string = "release" TestMode string = "test" )
const AbortIndex int8 = math.MaxInt8 / 2
const (
AuthUserKey = "user"
)
const BindKey = "_gin-gonic/gin/bindkey"
const ENV_GIN_MODE = "GIN_MODE"
const Version = "v1.0rc2"
Variables ¶
var DefaultWriter io.Writer = colorable.NewColorableStdout()
Functions ¶
func Dir ¶
func Dir(root string, listDirectory bool) http.FileSystem
It returns a http.Filesystem that can be used by http.FileServer(). It is used interally 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 ¶
func DisableBindValidation()
func IsDebugging ¶
func IsDebugging() bool
Types ¶
type Context ¶
type Context struct { Request *http.Request Writer ResponseWriter Params Params Keys map[string]interface{} Errors errorMsgs 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.
func (*Context) Abort ¶
func (c *Context) Abort()
Stops the system to continue calling the pending handlers in the chain. Let's say you have an authorization middleware that validates if the request is authorized if the authorization fails (the password does not match). This method (Abort()) should be called in order to stop the execution of the actual handler.
func (*Context) AbortWithError ¶
It 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 ¶
It calls Abort() and writes the headers with the specified status code. For example, a failed attempt to authentificate a request could use: context.AbortWithStatus(401).
func (*Context) Bind ¶
This function checks the Content-Type to select a binding engine automatically, Depending the "Content-Type" header different bindings are used: "application/json" --> JSON binding "application/xml" --> XML binding else --> returns an error if 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 ParseBody() but this method also writes a 400 error if the json is not valid.
func (*Context) ClientIP ¶
Best effort algoritm to return the real client IP, it parses X-Real-IP and X-Forwarded-For in order to work properly with reverse-proxies such us: nginx or haproxy.
func (*Context) ContentType ¶
func (*Context) DefaultPostForm ¶
func (*Context) DefaultQuery ¶
func (*Context) 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.
func (*Context) Get ¶
Returns the value for the given key, ie: (value, true). If the value does not exists it returns (nil, false)
func (*Context) 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 (*Context) Header ¶
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 ¶
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 to use this only for development propuses since printing pretty JSON is more CPU and bandwidth consuming. Use Context.JSON() instead.
func (*Context) JSON ¶
Serializes the given struct as JSON into the response body. It also sets the Content-Type as "application/json".
func (*Context) NegotiateFormat ¶
func (*Context) Next ¶
func (c *Context) Next()
Next should be used only in the middlewares. It executes the pending handlers in the chain inside the calling handler. See example in github.
func (*Context) Set ¶
Sets a new pair key/value just for this context. It also lazy initializes the hashmap if it was not used previously.
func (*Context) SetAccepted ¶
type Engine ¶
type Engine struct { RouterGroup HTMLRender render.HTMLRender // 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 // 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 // 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 bool // contains filtered or unexported fields }
Represents the web framework, it wraps the blazing fast httprouter multiplexer and a list of global middlewares.
func Default ¶
func Default() *Engine
Returns a Engine instance with the Logger and Recovery already attached.
func New ¶
func New() *Engine
Returns a new blank Engine instance without any middleware attached. The most basic configuration
func (*Engine) LoadHTMLFiles ¶
func (*Engine) LoadHTMLGlob ¶
func (*Engine) NoMethod ¶
func (engine *Engine) NoMethod(handlers ...HandlerFunc)
Sets the handlers called when... TODO
func (*Engine) NoRoute ¶
func (engine *Engine) NoRoute(handlers ...HandlerFunc)
Adds handlers for NoRoute. It return a 404 code by default.
func (*Engine) Routes ¶
func (engine *Engine) Routes() (routes RoutesInfo)
func (*Engine) Run ¶
The router is attached 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 undefinitelly unless an error happens.
func (*Engine) RunTLS ¶
The router is attached to a http.Server and starts listening and serving HTTPS requests. It is a shortcut for http.ListenAndServeTLS(addr, certFile, keyFile, router) Note: this method will block the calling goroutine undefinitelly unless an error happens.
func (*Engine) RunUnix ¶
The router is attached to a http.Server and starts listening and serving HTTP requests through the specified unix socket (ie. a file) Note: this method will block the calling goroutine undefinitelly unless an error happens.
func (*Engine) ServeHTTP ¶
func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request)
Conforms to the http.Handler interface.
func (*Engine) SetHTMLTemplate ¶
func (*Engine) Use ¶
func (engine *Engine) Use(middlewares ...HandlerFunc) routesInterface
Attachs a global middleware to the router. ie. the middlewares attached though 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.
type Error ¶
func (*Error) MarshalJSON ¶
Implements the json.Marshaller interface
type H ¶
type H map[string]interface{}
func (H) MarshalXML ¶
Allows type H to be used with xml.Marshal
type HandlerFunc ¶
type HandlerFunc func(*Context)
func BasicAuth ¶
func BasicAuth(accounts Accounts) HandlerFunc
Implements a basic Basic HTTP Authorization. It takes as argument a map[string]string where the key is the user name and the value is the password.
func BasicAuthForRealm ¶
func BasicAuthForRealm(accounts Accounts, realm string) HandlerFunc
Implements a basic Basic HTTP Authorization. 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 (see http://tools.ietf.org/html/rfc2617#section-1.2)
func Bind ¶
func Bind(val interface{}) HandlerFunc
func ErrorLogger ¶
func ErrorLogger() HandlerFunc
func ErrorLoggerT ¶
func ErrorLoggerT(typ ErrorType) HandlerFunc
func Logger ¶
func Logger() HandlerFunc
Instances a Logger middleware that will write the logs to gin.DefaultWriter By default gin.DefaultWriter = os.Stdout
func LoggerWithWriter ¶
func LoggerWithWriter(out io.Writer) HandlerFunc
Instance a Logger middleware with the specified writter buffer. Example: os.Stdout, a file opened in write mode, a socket...
func Recovery ¶
func Recovery() HandlerFunc
Recovery returns a middleware that recovers from any panics and writes a 500 if there was one.
func RecoveryWithWriter ¶
func RecoveryWithWriter(out io.Writer) HandlerFunc
func WrapF ¶
func WrapF(f http.HandlerFunc) HandlerFunc
func WrapH ¶
func WrapH(h http.Handler) HandlerFunc
type HandlersChain ¶
type HandlersChain []HandlerFunc
func (HandlersChain) Last ¶
func (c HandlersChain) Last() HandlerFunc
type Params ¶
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.
type ResponseWriter ¶
type RouterGroup ¶
type RouterGroup struct { Handlers HandlersChain BasePath string // contains filtered or unexported fields }
Used internally to configure router, a RouterGroup is associated with a prefix and an array of handlers (middlewares)
func (*RouterGroup) Any ¶
func (group *RouterGroup) Any(relativePath string, handlers ...HandlerFunc) routesInterface
func (*RouterGroup) DELETE ¶
func (group *RouterGroup) DELETE(relativePath string, handlers ...HandlerFunc) routesInterface
DELETE is a shortcut for router.Handle("DELETE", path, handle)
func (*RouterGroup) GET ¶
func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) routesInterface
GET is a shortcut for router.Handle("GET", path, handle)
func (*RouterGroup) Group ¶
func (group *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup
Creates a new router group. You should add all the routes that have common middlwares or the same path prefix. For example, all the routes that use a common middlware for authorization could be grouped.
func (*RouterGroup) HEAD ¶
func (group *RouterGroup) HEAD(relativePath string, handlers ...HandlerFunc) routesInterface
HEAD is a shortcut for router.Handle("HEAD", path, handle)
func (*RouterGroup) Handle ¶
func (group *RouterGroup) Handle(httpMethod, relativePath string, handlers ...HandlerFunc) routesInterface
func (*RouterGroup) OPTIONS ¶
func (group *RouterGroup) OPTIONS(relativePath string, handlers ...HandlerFunc) routesInterface
OPTIONS is a shortcut for router.Handle("OPTIONS", path, handle)
func (*RouterGroup) PATCH ¶
func (group *RouterGroup) PATCH(relativePath string, handlers ...HandlerFunc) routesInterface
PATCH is a shortcut for router.Handle("PATCH", path, handle)
func (*RouterGroup) POST ¶
func (group *RouterGroup) POST(relativePath string, handlers ...HandlerFunc) routesInterface
POST is a shortcut for router.Handle("POST", path, handle)
func (*RouterGroup) PUT ¶
func (group *RouterGroup) PUT(relativePath string, handlers ...HandlerFunc) routesInterface
PUT is a shortcut for router.Handle("PUT", path, handle)
func (*RouterGroup) Static ¶
func (group *RouterGroup) Static(relativePath, root string) routesInterface
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 (*RouterGroup) StaticFS ¶
func (group *RouterGroup) StaticFS(relativePath string, fs http.FileSystem) routesInterface
func (*RouterGroup) StaticFile ¶
func (group *RouterGroup) StaticFile(relativePath, filepath string) routesInterface
func (*RouterGroup) Use ¶
func (group *RouterGroup) Use(middlewares ...HandlerFunc) routesInterface
Adds middlewares to the group, see example code in github.
type RoutesInfo ¶
type RoutesInfo []RouteInfo