Documentation ¶
Index ¶
- Constants
- Variables
- func CreateTestContext(w http.ResponseWriter) (c *Context, r *Engine)
- func Dir(root string, browsable ...bool) http.FileSystem
- func EnableJSONDecoderDisallowUnknownFields()
- func EnableJSONDecoderUseNumber()
- func FS(fsys fs.FS, browsable ...bool) http.FileSystem
- func FixedModTimeFS(hfs http.FileSystem, mt time.Time) http.FileSystem
- func IsAjax(c *Context) bool
- func IsBrokenPipeError(err any) bool
- func Next(c *Context)
- func Recover(c *Context, r RecoveryFunc)
- func RedirectToSlach(c *Context)
- func Static(r IRoutes, relativePath, root string, handlers ...HandlerFunc)
- func StaticContent(r IRoutes, relativePath string, data []byte, modtime time.Time, ...)
- func StaticFS(r IRoutes, relativePath string, hfs http.FileSystem, filePath string, ...)
- func StaticFSFile(r IRoutes, relativePath string, hfs http.FileSystem, filePath string, ...)
- func StaticFSFunc(r IRoutes, relativePath string, hfsc func(c *Context) http.FileSystem, ...)
- func StaticFSFuncFile(r IRoutes, relativePath string, hfsc func(c *Context) http.FileSystem, ...)
- func StaticFile(r IRoutes, relativePath, filePath string, handlers ...HandlerFunc)
- type CacheControlSetter
- type Context
- func (c *Context) Abort()
- func (c *Context) AbortWithError(code int, err error)
- func (c *Context) AbortWithStatus(code int)
- func (c *Context) AbortWithStatusJSON(code int, jsonObj any)
- func (c *Context) AbortWithStatusText(code int, format string, values ...any)
- func (c *Context) AddError(err error)
- func (c *Context) AddParam(key, value string)
- func (c *Context) AsciiJSON(code int, obj any)
- func (c *Context) Attrs() map[string]any
- func (c *Context) Bind(obj any) error
- func (c *Context) BindBodyWith(obj any, bb binding.BodyBinding) (err error)
- func (c *Context) BindBodyWithJSON(obj any) error
- func (c *Context) BindBodyWithXML(obj any) error
- func (c *Context) BindHeader(obj any) error
- func (c *Context) BindJSON(obj any) error
- func (c *Context) BindQuery(obj any) error
- func (c *Context) BindURI(obj any) (err error)
- func (c *Context) BindWith(obj any, b binding.Binding) (err error)
- func (c *Context) BindXML(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) CopyUploadedFile(file *multipart.FileHeader, dst io.Writer) error
- 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) Del(key string)
- func (c *Context) Done() <-chan struct{}
- func (c *Context) Err() 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(key string) (*multipart.FileHeader, error)
- func (c *Context) FormFiles(key string) ([]*multipart.FileHeader, error)
- func (c *Context) FullPath() string
- func (c *Context) Get(key string) (value any, exists bool)
- func (c *Context) GetBool(key string) (b bool)
- func (c *Context) GetDuration(key string) (d time.Duration)
- func (c *Context) GetFloat64(key string) (f64 float64)
- func (c *Context) GetHeader(key string) string
- func (c *Context) GetInt(key string) (i int)
- func (c *Context) GetInt64(key string) (i64 int64)
- 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) GetPostFormMapArray(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) GetQueryMapArray(key string) (map[string][]string, bool)
- func (c *Context) GetRawData() ([]byte, error)
- func (c *Context) GetString(key string) (s string)
- func (c *Context) GetStringMap(key string) (sm map[string]any)
- func (c *Context) GetStringMapString(key string) (sms map[string]string)
- func (c *Context) GetStringMapStrings(key string) (smss map[string][]string)
- func (c *Context) GetStrings(key string) (ss []string)
- func (c *Context) GetTime(key string) (t time.Time)
- func (c *Context) GetUint(key string) (ui uint)
- func (c *Context) GetUint64(key string) (ui64 uint64)
- 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) IsSecure() 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) MustBind(obj any) error
- func (c *Context) MustBindHeader(obj any) error
- func (c *Context) MustBindJSON(obj any) error
- func (c *Context) MustBindQuery(obj any) error
- func (c *Context) MustBindURI(obj any) error
- func (c *Context) MustBindWith(obj any, b binding.Binding) error
- func (c *Context) MustBindXML(obj any) error
- func (c *Context) MustGet(key string) 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, defs ...string) string
- func (c *Context) PostFormArray(key string) (values []string)
- func (c *Context) PostFormMap(key string) (dict map[string]string)
- func (c *Context) PostFormMapArray(key string) (dict map[string][]string)
- func (c *Context) PostForms() map[string][]string
- func (c *Context) PureJSON(code int, obj any)
- func (c *Context) Query(key string, defs ...string) string
- func (c *Context) QueryArray(key string) (values []string)
- func (c *Context) QueryMap(key string) (dict map[string]string)
- func (c *Context) QueryMapArray(key string) (dict map[string][]string)
- func (c *Context) Querys() map[string][]string
- func (c *Context) ReadUploadedFile(file *multipart.FileHeader) ([]byte, error)
- 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) error
- func (c *Context) SecureJSON(code int, obj any)
- func (c *Context) Set(key string, value any)
- func (c *Context) SetAccepted(formats ...string)
- func (c *Context) SetAttachmentHeader(filename string)
- func (c *Context) SetCookie(cookie *http.Cookie)
- 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) Value(key any) any
- func (c *Context) XML(code int, obj any)
- type Engine
- func (engine *Engine) HandleContext(c *Context)
- func (engine *Engine) NoMethod(handlers ...HandlerFunc)
- func (engine *Engine) NoRoute(handlers ...HandlerFunc)
- func (engine *Engine) Routes() (routes RoutesInfo)
- func (engine *Engine) SecureJSONPrefix(prefix string) *Engine
- func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request)
- func (engine *Engine) SetTrustedProxies(trustedProxies []string) error
- func (engine *Engine) Use(middleware ...HandlerFunc) IRoutes
- type H
- type HandlerFunc
- func CustomRecovery(r RecoveryFunc) HandlerFunc
- func MustBind(val any) HandlerFunc
- func Recovery() HandlerFunc
- func Redirector(url string, codes ...int) HandlerFunc
- func ServeContentHandler(data []byte, modtime time.Time) HandlerFunc
- func ServeFSFileHandler(hfs http.FileSystem, filePath string) HandlerFunc
- func ServeFSFuncFileHandler(hfsc func(c *Context) http.FileSystem, filePath string) HandlerFunc
- func ServeFSFuncHandler(prefix string, hfsc func(c *Context) http.FileSystem, filePath string) HandlerFunc
- func ServeFSHandler(prefix string, hfs http.FileSystem, filePath string) HandlerFunc
- func ServeFileHandler(filePath string) HandlerFunc
- func WrapF(f http.HandlerFunc) HandlerFunc
- func WrapH(h http.Handler) HandlerFunc
- type HandlersChain
- type IRouter
- type IRoutes
- type Negotiate
- 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) 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) Use(middleware ...HandlerFunc) IRoutes
- 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 )
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 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" )
Trusted platforms
const BindKey = "XIN_BIND_KEY"
BindKey indicates a default bind key.
const BodyBytesKey = "XIN_BODY_BYTES"
BodyBytesKey indicates a default body bytes key.
const ContextKey = "XIN_CONTEXT"
ContextKey is the key that a Context returns itself for.
const RequestKey = "XIN_REQUEST"
RequestKey is the key that a Context returns it's Request.
Variables ¶
var ( AnywhereCIDRs = []string{"0.0.0.0/0", "::/0"} IntranetCIDRs = []string{"127.0.0.0/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "::1/32"} )
CIDRs used by TrustedProxies
Functions ¶
func CreateTestContext ¶
func CreateTestContext(w http.ResponseWriter) (c *Context, r *Engine)
CreateTestContext returns a fresh engine and context for testing purposes
func Dir ¶
func Dir(root string, browsable ...bool) http.FileSystem
Dir returns a http.FileSystem that can be used by http.FileServer(). if browsable == true, then it works the same as http.Dir() otherwise it returns a filesystem that prevents http.FileServer() to list the directory files.
func EnableJSONDecoderDisallowUnknownFields ¶
func EnableJSONDecoderDisallowUnknownFields()
EnableJSONDecoderDisallowUnknownFields sets true for binding.EnableDecoderDisallowUnknownFields to call the DisallowUnknownFields method on the JSON Decoder instance.
func EnableJSONDecoderUseNumber ¶
func EnableJSONDecoderUseNumber()
EnableJSONDecoderUseNumber sets true for binding.EnableDecoderUseNumber to call the UseNumber method on the JSON Decoder instance.
func FS ¶
func FS(fsys fs.FS, browsable ...bool) http.FileSystem
FS returns a http.FileSystem that can be used by http.FileServer(). if browsable == true, then it works the same as http.FS() otherwise it returns a filesystem that prevents http.FileServer() to list the directory files.
func FixedModTimeFS ¶
func FixedModTimeFS(hfs http.FileSystem, mt time.Time) http.FileSystem
FixedModTimeFS returns a FileSystem with fixed ModTime
func IsBrokenPipeError ¶
IsBrokenPipeError Check for a broken connection error
func Recover ¶ added in v1.0.10
func Recover(c *Context, r RecoveryFunc)
func RedirectToSlach ¶
func RedirectToSlach(c *Context)
RedirectToSlach is a HandlerFunc that redirect to the URL's path + "/" ex: /index?page=1 --> /index/?page=1
func Static ¶ added in v1.0.12
func Static(r IRoutes, relativePath, root string, handlers ...HandlerFunc)
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. example:
xin.Static(r, "/static", "/var/www", xin.NewCacheControlSetter("public, max-age=31536000").Handler())
func StaticContent ¶ added in v1.0.12
func StaticContent(r IRoutes, relativePath string, data []byte, modtime time.Time, handlers ...HandlerFunc)
StaticContent registers a single route in order to serve a single file of the data. example:
//go:embed favicon.ico var favicon []byte xin.StaticContent(r, "favicon.ico", favicon, time.Now(), xin.NewCacheControlSetter("public, max-age=31536000").Handler())
func StaticFS ¶ added in v1.0.12
func StaticFS(r IRoutes, relativePath string, hfs http.FileSystem, filePath string, handlers ...HandlerFunc)
StaticFS works just like `Static()` but a custom `http.FileSystem` can be used instead.
func StaticFSFile ¶ added in v1.0.12
func StaticFSFile(r IRoutes, relativePath string, hfs http.FileSystem, filePath string, handlers ...HandlerFunc)
StaticFSFile registers a single route in order to serve a single file of the filesystem. xin.StaticFSFile(r, "favicon.ico", hfs, "./resources/favicon.ico", xin.NewCacheControlSetter("public, max-age=31536000").Handler())
func StaticFSFunc ¶ added in v1.0.14
func StaticFSFunc(r IRoutes, relativePath string, hfsc func(c *Context) http.FileSystem, filePath string, handlers ...HandlerFunc)
StaticFSFunc works just like `StaticFS()` but a dynamic `http.FileSystem` can be used instead.
func StaticFSFuncFile ¶ added in v1.0.14
func StaticFSFuncFile(r IRoutes, relativePath string, hfsc func(c *Context) http.FileSystem, filePath string, handlers ...HandlerFunc)
StaticFSFuncFile works just like `StaticFSFile()` but a dynamic `http.FileSystem` can be used instead.
func StaticFile ¶ added in v1.0.12
func StaticFile(r IRoutes, relativePath, filePath string, handlers ...HandlerFunc)
StaticFile registers a single route in order to serve a single file of the local filesystem. example:
xin.StaticFile(r, "favicon.ico", "./resources/favicon.ico", xin.NewCacheControlSetter("public, max-age=31536000").Handler())
Types ¶
type CacheControlSetter ¶ added in v1.0.12
type CacheControlSetter struct {
CacheControl string
}
CacheControlSetter set Cache-Control header when statusCode == 200
func NewCacheControlSetter ¶ added in v1.0.12
func NewCacheControlSetter(cacheControls ...string) *CacheControlSetter
func (*CacheControlSetter) Handle ¶ added in v1.0.13
func (ccs *CacheControlSetter) Handle(c *Context)
func (*CacheControlSetter) Handler ¶ added in v1.0.13
func (ccs *CacheControlSetter) Handler() HandlerFunc
func (*CacheControlSetter) SetCacheControl ¶ added in v1.0.12
func (ccs *CacheControlSetter) SetCacheControl(cacheControls ...string)
func (*CacheControlSetter) WrapWriter ¶ added in v1.0.12
func (ccs *CacheControlSetter) WrapWriter(w ResponseWriter) ResponseWriter
type Context ¶
type Context struct { Request *http.Request Writer ResponseWriter Params Params // locale string for the context of each request. Locale string // Errors is a list of errors attached to all the handlers/middlewares who used this context. Errors []error // Accepted defines a list of manually accepted formats for content negotiation. Accepted []string // Logger Logger log.Logger // contains filtered or unexported fields }
Context is the most important part of xin. 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 CreateTestContextOnly ¶
func CreateTestContextOnly(w http.ResponseWriter, r *Engine) (c *Context)
CreateTestContextOnly returns a fresh context base on the engine for testing purposes
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 handlers for 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 c.String(code, "%d %s", code, http.StatusText(code)). For example, a failed attempt to authenticate a request could use: context.AbortWithStatus(401).
func (*Context) AbortWithStatusJSON ¶
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) AbortWithStatusText ¶ added in v1.0.14
AbortWithStatusText calls `Abort()` and then `String` internally. This method stops the chain, writes the status code and return a text body. It also sets the Content-Type as "text/plain".
func (*Context) AddError ¶
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) AddParam ¶
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 (*Context) AsciiJSON ¶
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 Content-Type to select a binding engine automatically, Depending on the "Content-Type" header different bindings are used:
"application/json" --> JSON binding "application/xml" --> XML binding
otherwise --> returns an error 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 and abort if the json is not valid.
func (*Context) BindBodyWith ¶
func (c *Context) BindBodyWith(obj any, bb binding.BodyBinding) (err error)
BindBodyWith is similar with BindWith, 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 BindWith for better performance if you need to call only once.
func (*Context) BindBodyWithJSON ¶ added in v1.0.15
BindBodyWithJSON is a shortcut for c.BindBodyWith(obj, binding.JSON).
func (*Context) BindBodyWithXML ¶ added in v1.0.15
BindBodyWithXML is a shortcut for c.BindBodyWith(obj, binding.XML).
func (*Context) BindHeader ¶
BindHeader is a shortcut for c.BindWith(obj, binding.Header).
func (*Context) BindURI ¶
BindURI binds the passed struct pointer using the specified binding engine.
func (*Context) BindWith ¶
BindWith binds the passed struct pointer using the specified binding engine. See the binding package.
func (*Context) ClientIP ¶
ClientIP implements one best effort algorithm to return the real client IP. It called 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 or ErrNoCookie if not found. And return the named cookie is unescaped. If multiple cookies match the given name, only one cookie will be 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) CopyUploadedFile ¶ added in v1.0.13
CopyUploadedFile read uploaded file to the specific buffer 'dst'.
func (*Context) DataFromReader ¶
func (c *Context) DataFromReader(code int, contentLength int64, contentType string, reader io.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) Del ¶ added in v1.0.15
Del is used to delete a stored key/value pair for this context.
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) FileAttachment ¶
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 (*Context) FileFromFS ¶
func (c *Context) FileFromFS(filepath string, fs http.FileSystem)
FileFromFS writes the specified file from http.FileSystem into the body stream in an efficient way.
func (*Context) FormFile ¶
func (c *Context) FormFile(key string) (*multipart.FileHeader, error)
FormFile returns the first file for the provided form key.
func (*Context) FormFiles ¶ added in v1.0.12
func (c *Context) FormFiles(key string) ([]*multipart.FileHeader, error)
FormFiles returns the files for the provided form key.
func (*Context) FullPath ¶
FullPath returns a matched route full path. For not found routes returns an empty string.
router.GET("/user/:id", func(c *xin.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) GetDuration ¶
GetDuration returns the value associated with the key as a duration.
func (*Context) GetFloat64 ¶
GetFloat64 returns the value associated with the key as a float64.
func (*Context) GetPostForm ¶
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") email= --> ("", true) := GetPostForm("email") = --> ("", false) := GetPostForm("email")
func (*Context) GetPostFormArray ¶
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 (*Context) GetPostFormMap ¶
GetPostFormMap returns a map for a given form key, plus a boolean value whether at least one value exists for the given key.
func (*Context) GetPostFormMapArray ¶ added in v1.0.12
GetPostFormMapArray returns a map for a given form key, plus a boolean value whether at least one value exists for the given key.
func (*Context) GetQuery ¶
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 (*Context) GetQueryArray ¶
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 (*Context) GetQueryMap ¶
GetQueryMap returns a map for a given query key, plus a boolean value whether at least one value exists for the given key.
func (*Context) GetQueryMapArray ¶ added in v1.0.12
GetQueryMapArray returns a map for a given query key, plus a boolean value whether at least one value exists for the given key.
func (*Context) GetRawData ¶
GetRawData returns stream data.
func (*Context) GetStringMap ¶
GetStringMap returns the value associated with the key as a map of interfaces.
func (*Context) GetStringMapString ¶
GetStringMapString returns the value associated with the key as a map of strings.
func (*Context) GetStringMapStrings ¶ added in v1.0.12
GetStringMapStrings returns the value associated with the key as a map to a slice of strings.
func (*Context) GetStrings ¶ added in v1.0.12
GetStrings returns the value associated with the key as a slice of strings.
func (*Context) GetUint64 ¶
GetUint64 returns the value associated with the key as an unsigned integer.
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". See http://golang.org/doc/articles/wiki/
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 ¶
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 is more CPU and bandwidth consuming. Use Context.JSON() instead.
func (*Context) IsSecure ¶ added in v1.0.14
IsSecure implements one best effort algorithm to check the https request. It checks the Request.URL.Scheme is 'https' or Request.TLS != nil. It called c.RemoteIP() under the hood, to check if the remote IP is a trusted proxy or not, then checks the SSLProxyHeaders (default "X-Forwarded-Proto": "https") to determine the https request.
func (*Context) IsWebsocket ¶
IsWebsocket returns true if the request headers indicate that a websocket handshake 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 ¶
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 ¶
MultipartForm is the parsed multipart form, including file uploads.
func (*Context) MustBind ¶
MustBind checks the Content-Type to select a binding engine automatically, Depending on the "Content-Type" header different bindings are used:
"application/json" --> JSON binding "application/xml" --> XML binding
otherwise --> returns an error. 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) MustBindHeader ¶
MustBindHeader is a shortcut for c.MustBindWith(obj, binding.Header).
func (*Context) MustBindJSON ¶
MustBindJSON is a shortcut for c.MustBindWith(obj, binding.JSON).
func (*Context) MustBindQuery ¶
MustBindQuery is a shortcut for c.MustBindWith(obj, binding.Query).
func (*Context) MustBindURI ¶
MustBindURI binds the passed struct pointer using binding.Uri. It will abort the request with HTTP 400 if any error occurs.
func (*Context) MustBindWith ¶
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) MustBindXML ¶
MustBindXML is a shortcut for c.MustBindWith(obj, binding.BindXML).
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 *xin.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 form when it exists, otherwise it returns the specified defs[0] string or 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 ¶
PostFormMap returns a map for a given form key.
func (*Context) PostFormMapArray ¶ added in v1.0.12
PostFormMapArray returns a map for a given form key.
func (*Context) PostForms ¶ added in v1.0.12
PostForms returns the POST urlencoded form or multipart form value map
func (*Context) PureJSON ¶
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 specified defs[0] string or 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", "none") == "none"
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) QueryMapArray ¶ added in v1.0.12
QueryMapArray returns a map for a given query key.
func (*Context) ReadUploadedFile ¶ added in v1.0.13
func (c *Context) ReadUploadedFile(file *multipart.FileHeader) ([]byte, error)
ReadUploadedFile read uploaded file and return it's content []byte.
func (*Context) RemoteIP ¶
RemoteIP parses the IP from Request.RemoteAddr, normalizes and returns the IP (without the port).
func (*Context) SaveUploadedFile ¶
func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string) error
SaveUploadedFile save uploaded file to the specific local file dst.
func (*Context) SecureJSON ¶
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.attrs if it was not used previously.
func (*Context) SetAccepted ¶
SetAccepted sets Accept header data.
func (*Context) SetAttachmentHeader ¶ added in v1.0.10
SetAttachmentHeader set response header Content-Disposition: attachment; filename=...
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 be silently dropped.
func (*Context) Stream ¶
Stream sends a streaming response and returns a boolean indicates "Is client disconnected in middle of stream"
type Engine ¶
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 // UseRawPath if enabled, the url.RawPath will be used to find parameters. UseRawPath bool // 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. 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 // `(*xin.Context).Request.RemoteAddr` is matched by at least one of the // network origins of list defined by `(*xin.Engine).SetTrustedProxies()`. RemoteIPHeaders []string // TrustedIPHeader if set to a constant of value xin.Platform*, trusts the headers set by // that platform to determine the client IP TrustedIPHeader string // SSLProxyHeaders is set of header keys with associated values that would indicate a valid https request. // Useful when behind a Proxy Server (Apache, Nginx). // Default is `map[string]string{"X-Forwarded-Proto": "https"}`. SSLProxyHeaders map[string]string // MaxMultipartMemory value of 'maxMemory' param that is given to http.Request's ParseMultipartForm // method call. MaxMultipartMemory int64 // ContextWithFallback enable fallback Context.Deadline(), Context.Done(), Context.Err() and Context.Value() when Context.Request.Context() is not nil. ContextWithFallback bool // HTMLTemplates html templates HTMLTemplates render.HTMLTemplates // Validator struct validator Validator validate.StructValidator // Logger Logger log.Logger // 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()
func Default ¶
func Default() *Engine
Default returns an Engine instance with the Recovery middleware already attached.
func New ¶
func New() *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) HandleContext ¶
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) 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() (routes RoutesInfo)
Routes returns a slice of registered routes, including some useful information, such as: the http method, path and the handler name.
func (*Engine) SecureJSONPrefix ¶
SecureJSONPrefix sets the secureJSONPrefix used in Context.SecureJSON. Prefixing the JSON string in this manner is used to help prevent JSON Hijacking. The prefix renders the string syntactically invalid as a script so that it cannot be hijacked. This prefix should be stripped before parsing the string as JSON. The default prefix is ")]}',\n".
func (*Engine) ServeHTTP ¶
func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request)
ServeHTTP conforms to the http.Handler interface.
func (*Engine) SetTrustedProxies ¶
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 `(*xin.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 (*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 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 H ¶
H is a shortcut for map[string]any
func (H) MarshalXML ¶
MarshalXML allows type H to be used with xml.Marshal.
type HandlerFunc ¶
type HandlerFunc func(*Context)
HandlerFunc defines the handler used by xin middleware as return value.
func CustomRecovery ¶ added in v1.0.10
func CustomRecovery(r RecoveryFunc) HandlerFunc
CustomRecovery returns a middleware that recovers from any panics and calls the provided handle func to handle it.
func MustBind ¶
func MustBind(val any) HandlerFunc
MustBind is a helper function for given interface object and returns a Xin middleware.
func Recovery ¶
func Recovery() HandlerFunc
Recovery returns a middleware that recovers from any panics and writes a 500 if there was one.
func Redirector ¶
func Redirector(url string, codes ...int) HandlerFunc
Redirector is a HandlerFunc that redirect to the url with http status codes[0] or http.StatusFound
func ServeContentHandler ¶ added in v1.0.13
func ServeContentHandler(data []byte, modtime time.Time) HandlerFunc
func ServeFSFileHandler ¶ added in v1.0.12
func ServeFSFileHandler(hfs http.FileSystem, filePath string) HandlerFunc
func ServeFSFuncFileHandler ¶ added in v1.0.14
func ServeFSFuncFileHandler(hfsc func(c *Context) http.FileSystem, filePath string) HandlerFunc
func ServeFSFuncHandler ¶ added in v1.0.14
func ServeFSFuncHandler(prefix string, hfsc func(c *Context) http.FileSystem, filePath string) HandlerFunc
func ServeFSHandler ¶ added in v1.0.13
func ServeFSHandler(prefix string, hfs http.FileSystem, filePath string) HandlerFunc
func ServeFileHandler ¶ added in v1.0.12
func ServeFileHandler(filePath string) HandlerFunc
func WrapF ¶
func WrapF(f http.HandlerFunc) HandlerFunc
WrapF is a helper function for wrapping http.HandlerFunc and returns a Xin middleware.
func WrapH ¶
func WrapH(h http.Handler) HandlerFunc
WrapH is a helper function for wrapping http.Handler and returns a Xin middleware.
type HandlersChain ¶
type HandlersChain []HandlerFunc
HandlersChain defines a HandlerFunc slice.
func (HandlersChain) Last ¶
func (c HandlersChain) Last() HandlerFunc
Last returns the last handler in the chain. i.e. the last handler is the main one.
type IRouter ¶
type IRouter interface { IRoutes Group(string, ...HandlerFunc) *RouterGroup }
IRouter defines all router handle interface includes single and group router.
type IRoutes ¶
type IRoutes interface { BasePath() string 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 }
IRoutes defines all router handle interface.
type Negotiate ¶
type Negotiate struct { Offered []string HTMLName string HTMLData any JSONData any XMLData any Data any }
Negotiate contains all negotiations data.
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 RecoveryFunc ¶ added in v1.0.10
RecoveryFunc defines the function passable to CustomRecovery.
type 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 }
ResponseWriter ...
func NewHeaderWriter ¶ added in v1.0.13
func NewHeaderWriter(w ResponseWriter, key, value string) ResponseWriter
NewHeaderWriter create a ResponseWriter to append on WriteHeader(statusCode int). if statusCode != 200, header will not append. a existing header will not be overwriten.
func NewHeadersWriter ¶ added in v1.0.13
func NewHeadersWriter(w ResponseWriter, h map[string]string) ResponseWriter
NewHeadersWriter create a ResponseWriter to append on WriteHeader(statusCode int). if statusCode != 200, header will not append. a existing header will not be overwriten.
type RouteInfo ¶
type RouteInfo struct { Method string Path string Handler string HandlerFunc HandlerFunc }
RouteInfo represents a request route's specification which contains method and path and its handler.
type RouterGroup ¶
type RouterGroup struct { Handlers HandlersChain // contains filtered or unexported fields }
RouterGroup is used internally to configure router, a RouterGroup is associated with a prefix and an array of handlers (middleware).
func (*RouterGroup) Any ¶
func (group *RouterGroup) Any(relativePath string, 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(relativePath string, handlers ...HandlerFunc) IRoutes
DELETE is a shortcut for router.Handle("DELETE", path, handlers).
func (*RouterGroup) GET ¶
func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes
GET is a shortcut for router.Handle("GET", path, handlers).
func (*RouterGroup) Group ¶
func (group *RouterGroup) Group(relativePath string, 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(relativePath string, handlers ...HandlerFunc) IRoutes
HEAD is a shortcut for router.Handle("HEAD", path, handlers).
func (*RouterGroup) Handle ¶
func (group *RouterGroup) Handle(httpMethod, relativePath string, 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 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).
func (*RouterGroup) OPTIONS ¶
func (group *RouterGroup) OPTIONS(relativePath string, handlers ...HandlerFunc) IRoutes
OPTIONS is a shortcut for router.Handle("OPTIONS", path, handlers).
func (*RouterGroup) PATCH ¶
func (group *RouterGroup) PATCH(relativePath string, handlers ...HandlerFunc) IRoutes
PATCH is a shortcut for router.Handle("PATCH", path, handlers).
func (*RouterGroup) POST ¶
func (group *RouterGroup) POST(relativePath string, handlers ...HandlerFunc) IRoutes
POST is a shortcut for router.Handle("POST", path, handlers).
func (*RouterGroup) PUT ¶
func (group *RouterGroup) PUT(relativePath string, handlers ...HandlerFunc) IRoutes
PUT is a shortcut for router.Handle("PUT", path, handlers).
func (*RouterGroup) Use ¶
func (group *RouterGroup) Use(middleware ...HandlerFunc) IRoutes
Use adds middleware to the group, see example code in GitHub.