Documentation ¶
Overview ¶
Package ginKit
TODO: 响应文件或文件流,目前一律用no-cache,在此种情况下会有问题:一个网址对应复数的图片(可以参考Web.docx).
Package ginKit 静态资源相关
Index ¶
- func AddResponseHeader(ctx *gin.Context, key, value string)
- func BindHandlersToRoute(group IGroup, route string, methods []string, handlers ...gin.HandlerFunc)
- func BindHandlersToRoutes(group IGroup, routes []string, methods []string, handlers ...gin.HandlerFunc)
- func DefaultFavicon(engine *gin.Engine)
- func DefaultNoMethod(engine *gin.Engine)
- func DefaultNoRouteHtml(engine *gin.Engine) error
- func DelResponseHeader(ctx *gin.Context, key string)
- func GetClientIp(ctx *gin.Context) string
- func GetRemoteIP(ctx *gin.Context) string
- func GetRequestHeader(ctx *gin.Context, key string) string
- func GetUserAgent(ctx *gin.Context) string
- func LoadHTMLFiles(engine IEngine, filePaths ...string)deprecated
- func LoadHTMLGlob(engine IEngine, pattern string)deprecated
- func MustSetUp(config *Config, businessLogic func(engine *gin.Engine) error, ...)
- func NewCorsMiddleware(origins []string) gin.HandlerFunc
- func NewEngine() *gin.Engine
- func NewFastGzipMiddleware() gin.HandlerFunc
- func NewOptionsMiddleware() gin.HandlerFunc
- func NewSizeLimiterMiddleware(limit int64) (gin.HandlerFunc, error)
- func NewSizeLimiterMiddleware1(limit int64) gin.HandlerFunc
- func ObtainBoolParam(ctx *gin.Context, key string) (bool, error)
- func ObtainFloat32Param(ctx *gin.Context, key string) (float32, error)
- func ObtainFloat64Param(ctx *gin.Context, key string) (float64, error)
- func ObtainFormFileContent(ctx *gin.Context, key string) ([]byte, string, error)
- func ObtainGetParam(ctx *gin.Context, key string) string
- func ObtainInt32Param(ctx *gin.Context, key string) (int32, error)
- func ObtainInt64Param(ctx *gin.Context, key string) (int64, error)
- func ObtainIntParam(ctx *gin.Context, key string) (int, error)
- func ObtainParam(ctx *gin.Context, key string) string
- func ObtainPostParam(ctx *gin.Context, key string) string
- func RespondError(ctx *gin.Context, statusCode int, err error)
- func RespondFile(ctx *gin.Context, httpStatusCode int, path, name string)
- func RespondFileContent(ctx *gin.Context, httpStatusCode int, name, contentType string, data []byte)
- func RespondFileFromFS(ctx *gin.Context, httpStatusCode int, filePath string, fs http.FileSystem)
- func RespondHtml(ctx *gin.Context, httpStatusCode int, htmlData []byte)
- func RespondIcon(ctx *gin.Context, httpStatusCode int, iconData []byte)
- func RespondPackage(ctx *gin.Context, pack *ResponsePackage)
- func RespondPackageOrError(ctx *gin.Context, pack *ResponsePackage, err error)
- func RespondPanic(ctx *gin.Context, err any)
- func RespondPdfContentToPrint(ctx *gin.Context, httpStatusCode int, pdfContent []byte)
- func SetCacheControlNoCache(ctx *gin.Context)
- func SetCacheControlNoStore(ctx *gin.Context)
- func SetHttpStatusCode(ctx *gin.Context, statusCode int)
- func SetResponseHeader(ctx *gin.Context, key, value string)
- func SetUp(config *Config, businessLogic func(engine *gin.Engine) error, ...) error
- func StaticDir(group IGroup, relativePath, root string, listDirectory bool) error
- func StaticFile(group IGroup, relativePath, filePath string) error
- func WrapToHandlerFunc(handler Handler) gin.HandlerFunc
- type Config
- type CorsConfig
- type GinOption
- func WithDefaultFavicon(defaultFavicon bool) GinOption
- func WithDefaultNoMethod(defaultNoMethod bool) GinOption
- func WithDefaultNoRouteHtml(defaultNoRouteHtml bool) GinOption
- func WithDefaultOptionsMiddleware(defaultOptionsMiddleware bool) GinOption
- func WithRecoveryMiddleware(recoveryMiddleware gin.HandlerFunc) GinOption
- func WithServiceInfo(serviceInfo string) GinOption
- type Handler
- type IEngine
- type IGroup
- type MiddlewareConfig
- type RateLimiterConfig
- type ResponsePackage
- type SslConfig
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AddResponseHeader ¶ added in v2.8.197
AddResponseHeader (响应头)
func BindHandlersToRoute ¶ added in v2.9.104
func BindHandlersToRoute(group IGroup, route string, methods []string, handlers ...gin.HandlerFunc)
BindHandlersToRoute
适用场景: 1个路由,n个Method.
@param methods nil => 接收所有类型method的请求. e.g. http.MethodGet、http.MethodPost @param handlers 其中的元素不能为nil!!!
func BindHandlersToRoutes ¶ added in v2.9.104
func BindHandlersToRoutes(group IGroup, routes []string, methods []string, handlers ...gin.HandlerFunc)
BindHandlersToRoutes 将相同的多个处理器,注册到多个路由.
func DefaultFavicon ¶ added in v2.8.128
func DefaultNoMethod ¶ added in v2.9.104
func DefaultNoRouteHtml ¶ added in v2.9.104
DefaultNoRouteHtml 使用自带的404页面.
func DelResponseHeader ¶ added in v2.8.197
DelResponseHeader (响应头)删除响应头.
func GetClientIp ¶
GetClientIp 获取客户端IP地址(客户端的真实IP地址,但结果并不总是可靠的).
PS: (1) ClientIP 方法首先检查 HTTP 请求头中的 X-Forwarded-For 和 X-Real-Ip 字段。如果这些字段存在,则 ClientIP() 会返回其中的值作为客户端的真实 IP 地址。
如果这些字段不存在,则 ClientIP() 会返回与 RemoteIP() 相同的结果。
(2) ctx.ClientIP() VS ctx.RemoteIP():
(2.1) 当客户端直接连接到服务器时,RemoteIP 和 ClientIP 方法返回的结果相同; (2.2) 当客户端通过代理服务器连接时, (a) RemoteIP() 返回代理服务器的 IP 地址; (b) ClientIP() 尝试从 HTTP 请求头中获取客户端的真实 IP 地址.
(3) 想要更加精确地获取客户端的真实 IP 地址,可以,通过 Engine.TrustedPlatform 和 Engine.SetTrustedProxies(),参考同目录下的 _info.md.
总结:
在使用Gin框架时,如果您希望获取客户端的真实 IP 地址,应该使用 ClientIP() 而不是 RemoteIP()。但是,请注意,由于客户端可以伪造 HTTP 请求头中的 X-Forwarded-For 和 X-Real-Ip 字段,因此 ClientIP 方法返回的结果并不总是可靠的。在某些情况下,您可能需要使用其他方法来验证客户端的真实 IP 地址。
func GetRequestHeader ¶ added in v2.8.197
GetRequestHeader (请求头)
func GetUserAgent ¶
GetUserAgent (请求头)获取http请求头中"User Agent"的值.
参考: https://www.sunzhongwei.com/golang-gin-for-user-agent-in-http-request-header-value
e.g. Chrome浏览器: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36 Safari浏览器: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15
func LoadHTMLFiles
deprecated
func LoadHTMLGlob
deprecated
func NewCorsMiddleware ¶
func NewCorsMiddleware(origins []string) gin.HandlerFunc
NewCorsMiddleware 新建一个cors中间件.
「Go框架」 Gin 怎么实现允许前端跨域请求?
https://mp.weixin.qq.com/s/2eJUJKJ3Xu5jOYXAfknqtA
@param origins (0) 可以为nil
(1) origin白名单 (2) 支持wildcard(*) (3) len(origins) == 0,则通配(请求的origin是什么就允许什么)
e.g.
传参: []string{"https://*.github.com", "https://api.*", "http://*", "https://facebook.com", "*.golang.org"}
func NewFastGzipMiddleware ¶ added in v2.8.177
func NewFastGzipMiddleware() gin.HandlerFunc
NewFastGzipMiddleware
PS: 涉及多个服务(请求转发)的场景下,(1) 最外层的务使用gzip压缩;
(2) 内层的服务不使用gzip压缩.
func NewOptionsMiddleware ¶ added in v2.9.104
func NewOptionsMiddleware() gin.HandlerFunc
NewOptionsMiddleware
PS: (1) 需要先使用 NewCorsMiddleware; (2) 就算 NoRoute || NoMethod,也会走到中间件.
func NewSizeLimiterMiddleware ¶ added in v2.8.181
func NewSizeLimiterMiddleware(limit int64) (gin.HandlerFunc, error)
NewSizeLimiterMiddleware 参考了echo中的 middleware.BodyLimit()
@param limit (1) 单位: MiB (2) 必须 > 0
func NewSizeLimiterMiddleware1 ¶ added in v2.8.181
func NewSizeLimiterMiddleware1(limit int64) gin.HandlerFunc
NewSizeLimiterMiddleware1
gin-contrib/size
https://github.com/gin-contrib/size
func ObtainFormFileContent ¶
ObtainFormFileContent form请求,根据 传参key 获取文件的字节流.(单文件上传)
@return 文件内容 + 文件名 + 错误
func ObtainPostParam ¶
ObtainPostParam
PS: (1) 原生方法的用法更加丰富! (2) 不需要额外手动解码; (3) 支持的Content-Type: multipart/form-data、x-www-form-urlencoded ...
func RespondFile ¶
RespondFile
PS: (1) 支持的浏览器: ie、Edge、Safari、Chrome、Firefox; (2) 按照实际的业务,自行判断是否和 ginKit.SetCacheControlNoCache() 或 ginKit.SetCacheControlNoStore() 组合使用,或者不设置 "Cache-Control".
@param name 文件名(如果为"",将自动从传参path中获取)
func RespondFileContent ¶
func RespondFileContent(ctx *gin.Context, httpStatusCode int, name, contentType string, data []byte)
RespondFileContent 响应文件流([]byte)给客户端.
PS: (1) 支持的浏览器: ie、Edge、Safari、Chrome、Firefox; (2) 按照实际的业务,自行判断是否和 ginKit.SetCacheControlNoCache() 或 ginKit.SetCacheControlNoStore() 组合使用,或者不设置 "Cache-Control".
@param name 可以为"" @param contentType 可以为"",将会使用默认值
func RespondFileFromFS ¶
RespondFileFromFS
PS: (1) 支持的浏览器: ie、Edge、Safari、Chrome、Firefox; (2) 按照实际的业务,自行判断是否和 ginKit.SetCacheControlNoCache() 或 ginKit.SetCacheControlNoStore() 组合使用,或者不设置 "Cache-Control".
func RespondHtml ¶
RespondHtml 响应html([]byte形式)给前端.
PS: (1) 只能是单纯的html文件,就算有js和css也只能内嵌,不能从外部导入; (2) 无法进行渲染(ctx.HTML()可以进行渲染); (3) 可以搭配 go-bindata 一起使用.
func RespondPackage ¶
func RespondPackage(ctx *gin.Context, pack *ResponsePackage)
RespondPackage
PS: 优先顺序(从高到低):文本(包括json)、 文件(路径)、文件(内容)、错误(error)
@param pack 可以为nil,此时:状态码为200,响应内容为空(不存在请求转发的情况).
func RespondPackageOrError ¶
func RespondPackageOrError(ctx *gin.Context, pack *ResponsePackage, err error)
func RespondPanic ¶
func RespondPdfContentToPrint ¶
RespondPdfContentToPrint 会触发浏览器端的打印.
PS: (1) 不要传文件名 (2) contentType为"application/pdf"
func SetCacheControlNoCache ¶
SetCacheControlNoCache 实际上是有缓存的)浏览器对请求回来的response做缓存,但是每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。
PS: 详见"Web.docx".
func SetHttpStatusCode ¶
SetHttpStatusCode (响应头)设置http状态码
func SetResponseHeader ¶ added in v2.8.197
SetResponseHeader (响应头)
func SetUp ¶ added in v2.8.163
func SetUp(config *Config, businessLogic func(engine *gin.Engine) error, options ...GinOption) error
SetUp
PS: 正常执行的情况下,此方法会阻塞调用的协程.
@param config 不能为nil(否则将返回error) @param businessLogic 业务逻辑,可以在其中进行 路由绑定 等操作...(可以为nil,但不推荐这么干)
func StaticDir ¶
StaticDir 静态资源(目录)
@param relativePath 路由 @param root 相对路径(对于项目的根目录(working directory),而非main()所在的目录(虽然他们常常是同一个)) || 绝对路径 @param listDirectory 是否列出目录下的文件,true: 当目录下不存 index.html 文件时,会列出该目录下的所有文件(正式环境不推荐,因为不安全)
func StaticFile ¶
StaticFile 静态资源(单个文件)
@param relativePath 路由 @param filePath 相对路径(对于项目的根目录(working directory),而非main()所在的目录(虽然他们常常是同一个)) || 绝对路径
func WrapToHandlerFunc ¶
func WrapToHandlerFunc(handler Handler) gin.HandlerFunc
WrapToHandlerFunc Handler 类型 => gin.HandlerFunc 类型
@param handler 不能为nil
Types ¶
type Config ¶
type Config struct { Mode string `json:"mode" yaml:"mode" validate:"omitempty,oneof=debug release test"` HostName string `json:"hostName" yaml:"hostName" validate:"omitempty,hostname|ipv4"` // Port /* 0(默认): 不使用 http port */ Port int `json:"port" yaml:"port" validate:"port|eq=0,necsfield=SSL.Port"` DisableColor bool `json:"disableColor" yaml:"disableColor"` Pprof bool `json:"pprof" yaml:"pprof"` SSL SslConfig `json:"ssl" yaml:"ssl"` Middleware MiddlewareConfig `json:"middleware" yaml:"middleware"` }
type CorsConfig ¶
type CorsConfig struct { Access bool `json:"access" yaml:"access"` Origins []string `json:"origins" yaml:"origins" validate:"unique,dive,required"` }
CorsConfig cors(跨源资源共享)的配置
type GinOption ¶ added in v2.8.177
type GinOption func(opts *ginOptions)
func WithDefaultFavicon ¶ added in v2.8.177
func WithDefaultNoMethod ¶ added in v2.8.197
func WithDefaultNoRouteHtml ¶ added in v2.9.104
func WithDefaultOptionsMiddleware ¶ added in v2.9.104
func WithRecoveryMiddleware ¶ added in v2.8.177
func WithRecoveryMiddleware(recoveryMiddleware gin.HandlerFunc) GinOption
func WithServiceInfo ¶ added in v2.8.177
type IEngine ¶
type IEngine interface { LoadHTMLFiles(filePaths ...string) LoadHTMLGlob(pattern string) NoRoute(handlers ...gin.HandlerFunc) }
type IGroup ¶
type IGroup interface { Handle(httpMethod, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes Any(relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes StaticFile(relativePath, filepath string) gin.IRoutes StaticFS(relativePath string, fs http.FileSystem) gin.IRoutes Static(relativePath, root string) gin.IRoutes }
type MiddlewareConfig ¶
type MiddlewareConfig struct { BodyLimit int64 `json:"bodyLimit" yaml:"bodyLimit"` Gzip bool `json:"gzip" yaml:"gzip"` XFrameOptions string `json:"xFrameOptions" yaml:"xFrameOptions" validate:"omitempty,lowercase,oneof=deny sameorigin|startswith=allow-from "` Cors CorsConfig `json:"cors" yaml:"cors"` //Referer []*refererKit.RefererVerifierBuilder `json:"referer" yaml:"referer"` RateLimiter *RateLimiterConfig }
type RateLimiterConfig ¶ added in v2.8.165
type RateLimiterConfig struct { R int `json:"r" yaml:"r" validate:"gt=0"` B int `json:"b" yaml:"b" validate:"gt=0,gtecsfield=R"` }
RateLimiterConfig 限流器(令牌桶算法)的配置
type ResponsePackage ¶
type ResponsePackage struct { // StatusCode http状态码(默认200,即 http.StatusOK) StatusCode int // Object json对象(不为nil的情况下,序列化为json并响应给前端) Object interface{} // Text 响应字符串(也可以是json) Text string // FilePath 响应文件的路径 FilePath string // FileContent 响应文件的内容 FileContent []byte // ContentType 响应文件内容的类型(需要与 FileContent 搭配使用) ContentType string // FileName 文件名 /* PS: 使用 FilePath 的情况下, FileName 是可选的,为空的话会自己从 FilePath 中截取 */ FileName string Error error }
Source Files ¶
- bean.go
- config.go
- engine.go
- header_request.go
- header_response.go
- interfaces.go
- ip.go
- middleware.go
- middleware_cors.go
- middleware_gzip.go
- middleware_options.go
- middleware_size.go
- no_method.go
- no_route.go
- request_param.go
- respond.go
- route.go
- routeFavicon.go
- setup.go
- setup_option.go
- static.go
- wrapper.go