Documentation ¶
Overview ¶
Package ginKit
TODO: 响应文件或文件流,目前一律用no-cache,在此种情况下会有问题:一个网址对应复数的图片(可以参考Web.docx).
Package ginKit 路由相关
Package ginKit 静态资源相关
Index ¶
- func AddHeader(ctx *gin.Context, key, value string)
- func DelHeader(ctx *gin.Context, key string)
- func FaviconByDefault(group IGroup) error
- func GetClientIp(ctx *gin.Context) string
- func GetHeader(ctx *gin.Context, key string) string
- func GetRequestRoute(ctx *gin.Context) string
- func GetUserAgent(ctx *gin.Context) string
- func LoadHtmlFiles(engine IEngine, filePaths ...string)
- func LoadHtmlGlob(engine IEngine, pattern string)
- func MustSetUp(config *Config, recoveryMiddleware gin.HandlerFunc, ...)
- func NewCorsMiddleware(origins []string) gin.HandlerFunc
- func NewEngine() *gin.Engine
- func NewOpenCorsMiddleware() gin.HandlerFunc
- func NoRoute(engine IEngine, handlers ...gin.HandlerFunc)
- func NoRouteByDefault(engine IEngine) error
- 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 RegisterHandlersToRoute(group IGroup, route string, methods []string, handlers ...gin.HandlerFunc)
- func RegisterHandlersToRoutes(group IGroup, routes []string, methods []string, handlers ...gin.HandlerFunc)
- 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 RespondJson(ctx *gin.Context, statusCode int, h gin.H)
- 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 RespondText(ctx *gin.Context, statusCode int, format string, args ...interface{})
- func SetCacheControlNoCache(ctx *gin.Context)
- func SetCacheControlNoStore(ctx *gin.Context)
- func SetHeader(ctx *gin.Context, key, value string)
- func SetHttpStatusCode(ctx *gin.Context, statusCode int)
- func StaticDir(group IGroup, relativePath, dirPath string, listDirectory bool)
- func StaticFile(group IGroup, relativePath, filePath string)
- func WrapToHandlerFunc(handler Handler) gin.HandlerFunc
- type Config
- type CorsConfig
- type Handler
- type IEngine
- type IGroup
- type MiddlewareConfig
- type ResponsePackage
- type SslConfig
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FaviconByDefault ¶
func GetClientIp ¶
GetClientIp 获取客户端的ip.
PS: 为了更加准确的获取客户端ip,可以同时使用 Context.ClientIP() 和 Engine.TrustedPlatform (此外还需配置代理),详见参考.
参考: gin框架中设置信任代理IP并获取远程客户端IP
https://www.cnblogs.com/mayanan/p/15703234.html
gin获取用户请求IP
https://blog.csdn.net/weixin_45867397/article/details/122849424
e.g.
访问url为"http://localhost/test",返回值则为"::1"
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 ¶
LoadHtmlFiles 加载(多个)html文件
func LoadHtmlGlob ¶
func NewCorsMiddleware ¶
func NewCorsMiddleware(origins []string) gin.HandlerFunc
NewCorsMiddleware 新建一个cors中间件.
@param origins (1) origin白名单(可以为nil)
(2) 支持wildcard(*) (3) len(origins) == 0,则通配
e.g.
传参: []string{"https://*.github.com", "https://api.*", "http://*", "https://facebook.com", "*.golang.org"}
func NewOpenCorsMiddleware ¶
func NewOpenCorsMiddleware() gin.HandlerFunc
NewOpenCorsMiddleware 新建一个开放的(任意origin都通过)cors中间件.
func ObtainBoolParam ¶ added in v2.0.10
func ObtainFloat32Param ¶ added in v2.0.10
func ObtainFloat64Param ¶ added in v2.0.10
func ObtainFormFileContent ¶ added in v2.0.10
ObtainFormFileContent form请求,根据 传参key 获取文件的字节流.(单文件上传)
@return 文件内容 + 文件名 + 错误
func ObtainGetParam ¶ added in v2.0.10
ObtainGetParam 从url获取参数
func ObtainInt32Param ¶ added in v2.0.10
func ObtainInt64Param ¶ added in v2.0.10
func ObtainIntParam ¶ added in v2.0.10
func ObtainParam ¶ added in v2.0.10
ObtainParam 获取请求参数(优先级: GET > POST)
func ObtainPostParam ¶ added in v2.0.10
ObtainPostParam
支持的Content-Type: multipart/form-data、x-www-form-urlencoded ...
func RegisterHandlersToRoute ¶
func RegisterHandlersToRoute(group IGroup, route string, methods []string, handlers ...gin.HandlerFunc)
RegisterHandlersToRoute 将多个相同的处理器,注册到1个路由
@param methods nil => 接收所有类型method的请求. e.g. http.MethodGet、http.MethodPost
func RegisterHandlersToRoutes ¶
func RegisterHandlersToRoutes(group IGroup, routes []string, methods []string, handlers ...gin.HandlerFunc)
RegisterHandlersToRoutes 将多个相同的处理器,注册到多个路由
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 StaticFile ¶
StaticFile 静态资源(单个文件)
func WrapToHandlerFunc ¶
func WrapToHandlerFunc(handler Handler) gin.HandlerFunc
WrapToHandlerFunc Handler 类型 => gin.HandlerFunc 类型
Types ¶
type Config ¶
type CorsConfig ¶
type CorsConfig struct { Access bool `json:"access,default=false"` Origins []string `json:"origins,optional"` }
CorsConfig cors(跨源资源共享)的配置
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,default=-1,range=[-1:10000]"` Gzip bool `json:"gzip,default=false"` XFrameOptions string `json:"xFrameOptions,optional"` Cors *CorsConfig `json:"cors,optional"` Referer []*refererKit.RefererVerifierBuilder `json:"referer,optional"` }
type ResponsePackage ¶
type ResponsePackage struct { // StatusCode http状态码(默认200,即 http.StatusOK) StatusCode int // Text 响应字符串(也可以是json) Text string // FilePath 响应文件的路径 FilePath string // FileContent 响应文件的内容 FileContent []byte // ContentType 响应文件内容的类型(需要与 FileContent 搭配使用) ContentType string // FileName 文件名 /* PS: 使用 FilePath 的情况下, FileName 是可选的,为空的话会自己从 FilePath 中截取 */ FileName string Error error }