ginKit

package
v2.1.39 Latest Latest
Warning

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

Go to latest
Published: Aug 9, 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 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中间件.

「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 NewEngine

func NewEngine() *gin.Engine

NewEngine

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

func NoRoute

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

NoRoute 404

func NoRouteByDefault

func NoRouteByDefault(engine IEngine) error

NoRouteByDefault 使用自带的404页面

func ObtainBoolParam

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

func ObtainFloat32Param

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

func ObtainFloat64Param

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

func ObtainFormFileContent

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

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

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

func ObtainGetParam

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

ObtainGetParam 从url获取参数

func ObtainInt32Param

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

func ObtainInt64Param

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

func ObtainIntParam

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

func ObtainParam

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

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

func ObtainPostParam

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 {
	Mode     string `json:"mode,default=debug,options=debug|release|test"`
	HostName string `json:"hostName,optional"`
	Port     int    `json:"port,default=80,range=[1:65535]"`
	Colorful bool   `json:"colorful,default=true"`
	Pprof    bool   `json:"pprof,default=false"`

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

func (*Config) Verify

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:]"`
	Gzip          bool                                 `json:"gzip,default=false"`
	XFrameOptions string                               `json:"xFrameOptions,optional"`
	Cors          CorsConfig                           `json:"cors"`
	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 {
	Access   bool   `json:"access,default=false"`
	CertFile string `json:"certFile,optional"`
	KeyFile  string `json:"keyFile,optional"`
}

Jump to

Keyboard shortcuts

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