Documentation ¶
Overview ¶
Package ginKit
参考: 使用gin搭建api后台系统之cookie与session https://mp.weixin.qq.com/s/nSu4ZQ9lStvGFNnuC2WKnA
Package ginKit ¶
TODO: 响应文件或文件流,目前一律用no-cache,在此种情况下会有问题:一个网址对应复数的图片(可以参考Web.docx).
Package ginKit 路由相关
Package ginKit 静态资源相关
Index ¶
- Variables
- func AddHeader(ctx *gin.Context, key, value string)
- func AttachCommonMiddlewares(engine *gin.Engine, middlewareConfig *MiddlewareConfig, ...) error
- func DelCookie()
- func DelHeader(ctx *gin.Context, key string)
- func FaviconByDefault(group IGroup) error
- func ForwardRequest(ctx *gin.Context, params ForwardParams, errorLogger *log.Logger) error
- func GetBoolParam(ctx *gin.Context, key string, def bool) bool
- func GetClientIp(ctx *gin.Context) string
- func GetCookie(ctx *gin.Context, name string) (string, error)
- func GetFloat32Param(ctx *gin.Context, key string, def float32) float32
- func GetFloat64Param(ctx *gin.Context, key string, def float64) float64
- func GetFormFile(ctx *gin.Context, key string) (*multipart.FileHeader, error)
- func GetFormFileContent(ctx *gin.Context, key string) ([]byte, string, error)
- func GetHeader(ctx *gin.Context, key string) string
- func GetIntParam(ctx *gin.Context, key string, def int) int
- func GetParam(ctx *gin.Context, key string) string
- func GetParamFromGet(ctx *gin.Context, key string) string
- func GetParamFromPost(ctx *gin.Context, key string) string
- func GetReqUrlPathForForward(req *http.Request, contextPath string) *string
- func GetRequestRoute(ctx *gin.Context) string
- func GetUserAgent(ctx *gin.Context) string
- func Initialize(colorful bool)
- 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 OnDebugChanged()
- 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, httpStatusCode 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 SetBaseExtraQuery(m map[string]string)
- func SetCacheControlNoCache(ctx *gin.Context)
- func SetCacheControlNoStore(ctx *gin.Context)
- func SetCookie(ctx *gin.Context, name, value string, maxAge int, path, domain string, ...)
- func SetHeader(ctx *gin.Context, key, value string)
- func SetHttpStatusCode(ctx *gin.Context, statusCode int)
- func SetUp(config *Config, recoveryMiddleware gin.HandlerFunc, ...) error
- 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 ForwardParams
- type Handler
- type IEngine
- type IGroup
- type MiddlewareConfig
- type ResponsePackage
Constants ¶
This section is empty.
Variables ¶
var SafeParamCapture = ¶mCapture{ safe: true, }
SafeParamCapture 安全的,如果满足以下条件则必须使用此实例:请求转发、请求转发前会从POST中取参数、不会覆盖请求参数
var UnsafeParamCapture = ¶mCapture{ safe: false, }
UnsafeParamCapture 默认的,不安全的
Functions ¶
func AttachCommonMiddlewares ¶
func AttachCommonMiddlewares(engine *gin.Engine, middlewareConfig *MiddlewareConfig, recoveryMiddleware gin.HandlerFunc) error
AttachCommonMiddlewares 绑定一些常用的中间件.
func FaviconByDefault ¶
func ForwardRequest ¶
ForwardRequest 请求转发(http请求、websocket请求...)
!!!:如果两个地址,一个有contextPath(""和"/"等价)一个没有,需要注意参数path;其他情况参数path直接传nil即可.
@param errLogger 可以为nil,但不建议这么干,因为错误会输出到控制台(通过 log.Printf()),不利于错误定位 @return 可能是 context.Canceled(可以用==进行比较)
e.g. 如果请求转发的目标有效,但处理此请求需要花费大量时间(比如20+min),此时如果请求的客户端终端了请求(e.g.浏览器页面被直接关闭了),将返回 context.Canceled.
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
func GetFormFile ¶
func GetFormFileContent ¶
func GetReqUrlPathForForward ¶
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 origin白名单,可以为nil
func NewOpenCorsMiddleware ¶
func NewOpenCorsMiddleware() gin.HandlerFunc
NewOpenCorsMiddleware 新建一个开放的(任意origin都通过)cors中间件.
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 SetBaseExtraQuery ¶
func SetCacheControlNoCache ¶
SetCacheControlNoCache 实际上是有缓存的)浏览器对请求回来的response做缓存,但是每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。
PS: 详见"Web.docx".
func SetCookie ¶
func SetCookie(ctx *gin.Context, name, value string, maxAge int, path, domain string, secure, httpOnly bool)
SetCookie cookie
@param name cookie的键 @param value cookie的值 @param maxAge cookie的有效时长(单位为秒;超时即会失效) @param path cookie所在的目录(可以为"",会被"/"替换) @param domain 所在域,表示我们的 cookie 作用范围,里面可以是localhost也可以是你的域名,看自己情况(可以为"",此时响应头中Set-Cookie将不会带有domain信息,前端自行生成与当前页面对应的) @param secure 是否只能通过https访问?true: 只能通过https访问 @param httpOnly cookie是否可以通过js代码进行操作?true: 不能被js进行操作
func SetHttpStatusCode ¶
SetHttpStatusCode 设置http状态码
func SetUp ¶ added in v1.3.11
func SetUp(config *Config, recoveryMiddleware gin.HandlerFunc, businessLogic func(engine *gin.Engine) error) error
SetUp
PS: 正常执行的情况下,此方法会阻塞调用的协程.
@param recoveryMiddleware 可以为nil(将采用默认值 gin.Recovery()) @param businessLogic 可以为nil;业务逻辑,可以在其中进行 路由绑定 等操作...
func StaticFile ¶
StaticFile 静态资源(单个文件)
func WrapToHandlerFunc ¶
func WrapToHandlerFunc(handler Handler) gin.HandlerFunc
WrapToHandlerFunc Handler 类型 => gin.HandlerFunc 类型
Types ¶
type Config ¶ added in v1.3.11
type Config struct { Host string `json:"host,optional"` Port int /* 日志的颜色(默认true) true: 强制设置日志颜色 false: 禁止日志颜色 */ Colorful bool `json:"colorful,default=true"` Middleware *MiddlewareConfig }
type CorsConfig ¶
CorsConfig cors(跨源资源共享)的配置
type ForwardParams ¶
type ForwardParams struct { netKit.Address // 一般为:"http"(包括ws协议)、"https" Scheme string // 可以为 nil,也可以通过 GetReqUrlPathForForward() 获取 ReqUrlPath *string // 拼成字符串,放在url中 ExtraQuery map[string]string }
ForwardParams 请求转发所需的参数
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 { Gzip bool `json:"gzip,default=true"` XFrameOptions string `json:"xFrameOptions,optional"` Cors *CorsConfig 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 }