ginKit

package
v2.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 3, 2023 License: Apache-2.0 Imports: 25 Imported by: 0

Documentation

Overview

Package ginKit

TODO: 响应文件或文件流,目前一律用no-cache,在此种情况下会有问题:一个网址对应复数的图片(可以参考Web.docx).

Package ginKit 路由相关

Package ginKit 静态资源相关

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddHeader

func AddHeader(ctx *gin.Context, key, value string)

func DelHeader

func DelHeader(ctx *gin.Context, key string)

func FaviconByDefault

func FaviconByDefault(group IGroup) error

func GetClientIp

func GetClientIp(ctx *gin.Context) string

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 GetHeader

func GetHeader(ctx *gin.Context, key string) string

func GetRequestRoute

func GetRequestRoute(ctx *gin.Context) string

GetRequestRoute 获取请求的路由.

func GetUserAgent

func GetUserAgent(ctx *gin.Context) string

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

func LoadHtmlFiles(engine IEngine, filePaths ...string)

LoadHtmlFiles 加载(多个)html文件

func LoadHtmlGlob

func LoadHtmlGlob(engine IEngine, pattern string)

func MustSetUp

func MustSetUp(config *Config, recoveryMiddleware gin.HandlerFunc, businessLogic func(engine *gin.Engine) error)

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 NewEngine

func NewEngine() *gin.Engine

NewEngine

@param recovery 可以为nil,将采用默认值 gin.Recovery()

func NewOpenCorsMiddleware

func NewOpenCorsMiddleware() gin.HandlerFunc

NewOpenCorsMiddleware 新建一个开放的(任意origin都通过)cors中间件.

func NoRoute

func NoRoute(engine IEngine, handlers ...gin.HandlerFunc)

NoRoute 404

func NoRouteByDefault

func NoRouteByDefault(engine IEngine) error

NoRouteByDefault 使用自带的404页面

func ObtainBoolParam added in v2.0.10

func ObtainBoolParam(ctx *gin.Context, key string) (bool, error)

func ObtainFloat32Param added in v2.0.10

func ObtainFloat32Param(ctx *gin.Context, key string) (float32, error)

func ObtainFloat64Param added in v2.0.10

func ObtainFloat64Param(ctx *gin.Context, key string) (float64, error)

func ObtainFormFileContent added in v2.0.10

func ObtainFormFileContent(ctx *gin.Context, key string) ([]byte, string, error)

ObtainFormFileContent form请求,根据 传参key 获取文件的字节流.(单文件上传)

@return 文件内容 + 文件名 + 错误

func ObtainGetParam added in v2.0.10

func ObtainGetParam(ctx *gin.Context, key string) string

ObtainGetParam 从url获取参数

func ObtainInt32Param added in v2.0.10

func ObtainInt32Param(ctx *gin.Context, key string) (int32, error)

func ObtainInt64Param added in v2.0.10

func ObtainInt64Param(ctx *gin.Context, key string) (int64, error)

func ObtainIntParam added in v2.0.10

func ObtainIntParam(ctx *gin.Context, key string) (int, error)

func ObtainParam added in v2.0.10

func ObtainParam(ctx *gin.Context, key string) string

ObtainParam 获取请求参数(优先级: GET > POST)

func ObtainPostParam added in v2.0.10

func ObtainPostParam(ctx *gin.Context, key string) string

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 RespondError

func RespondError(ctx *gin.Context, statusCode int, err error)

func RespondFile

func RespondFile(ctx *gin.Context, httpStatusCode int, path, name string)

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

func RespondFileFromFS(ctx *gin.Context, httpStatusCode int, filePath string, fs http.FileSystem)

RespondFileFromFS

PS: (1) 支持的浏览器: ie、Edge、Safari、Chrome、Firefox; (2) 按照实际的业务,自行判断是否和 ginKit.SetCacheControlNoCache() 或 ginKit.SetCacheControlNoStore() 组合使用,或者不设置 "Cache-Control".

func RespondHtml

func RespondHtml(ctx *gin.Context, httpStatusCode int, htmlData []byte)

RespondHtml 响应html([]byte形式)给前端.

PS: (1) 只能是单纯的html文件,就算有js和css也只能内嵌,不能从外部导入; (2) 无法进行渲染(ctx.HTML()可以进行渲染); (3) 可以搭配 go-bindata 一起使用.

func RespondIcon

func RespondIcon(ctx *gin.Context, httpStatusCode int, iconData []byte)

func RespondJson

func RespondJson(ctx *gin.Context, statusCode int, h gin.H)

RespondJson 响应json字符串.

@param h gin.H is a shortcut for map[string]interface{}

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 RespondPanic(ctx *gin.Context, err any)

func RespondPdfContentToPrint

func RespondPdfContentToPrint(ctx *gin.Context, httpStatusCode int, pdfContent []byte)

RespondPdfContentToPrint 会触发浏览器端的打印.

PS: (1) 不要传文件名 (2) contentType为"application/pdf"

func RespondText

func RespondText(ctx *gin.Context, statusCode int, format string, args ...interface{})

RespondText 响应文本.

@param args 用于替换 传参format 中的格式占位符(%s、%d...)

func SetCacheControlNoCache

func SetCacheControlNoCache(ctx *gin.Context)

SetCacheControlNoCache 实际上是有缓存的)浏览器对请求回来的response做缓存,但是每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。

PS: 详见"Web.docx".

func SetCacheControlNoStore

func SetCacheControlNoStore(ctx *gin.Context)

SetCacheControlNoStore 禁止一切缓存.

PS: 详见"Web.docx".

func SetHeader

func SetHeader(ctx *gin.Context, key, value string)

func SetHttpStatusCode

func SetHttpStatusCode(ctx *gin.Context, statusCode int)

SetHttpStatusCode 设置http状态码

func StaticDir

func StaticDir(group IGroup, relativePath, dirPath string, listDirectory bool)

StaticDir 静态资源(目录)

@param relativePath 路由 @param dirPath 静态资源所在的目录(相对路径 || 绝对路径)

func StaticFile

func StaticFile(group IGroup, relativePath, filePath string)

StaticFile 静态资源(单个文件)

func WrapToHandlerFunc

func WrapToHandlerFunc(handler Handler) gin.HandlerFunc

WrapToHandlerFunc Handler 类型 => gin.HandlerFunc 类型

Types

type Config

type Config struct {
	Host     string `json:"host,optional"`
	Port     int    `json:"port,default=-1,range=[-1:65535]"`
	Colorful bool   `json:"colorful,default=true"`
	Pprof    bool   `json:"pprof,default=false"`

	Middleware *MiddlewareConfig `json:"middleware"`
	SSL        *SslConfig        `json:"ssl"`
}

func (*Config) Verify added in v2.0.16

func (config *Config) Verify() error

type CorsConfig

type CorsConfig struct {
	Access  bool     `json:"access,default=false"`
	Origins []string `json:"origins,optional"`
}

CorsConfig cors(跨源资源共享)的配置

type Handler

type Handler func(ctx *gin.Context) (*ResponsePackage, error)

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
}

type SslConfig

type SslConfig struct {
	CertFile string `json:"certFile,optional"`
	KeyFile  string `json:"keyFile,optional"`
	Port     int    `json:"port,default=-1,range=[-1:65535]"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL