web

package
v1.3.1 Latest Latest
Warning

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

Go to latest
Published: Aug 11, 2025 License: MIT Imports: 26 Imported by: 1

Documentation

Index

Constants

View Source
const DefaultBodyLimit = 100

Variables

This section is empty.

Functions

func AbortWithStatusJSON

func AbortWithStatusJSON(c ResponseWriter, err error, fn ...WithData)

func AddHead

func AddHead() gin.HandlerFunc

func AuthLevel

func AuthLevel(level int) gin.HandlerFunc

func AuthMiddleware

func AuthMiddleware(secret string) gin.HandlerFunc

AuthMiddleware 鉴权

func CacheControlMaxAge

func CacheControlMaxAge(millisecond int) gin.HandlerFunc

WebCache 主要用于缓存静态资源 Cache-Control: max-age=3600 # 缓存1小时 Cache-Control: no-cache # 每次都需要验证 Cache-Control: no-store # 完全不缓存 Cache-Control: private # 只允许浏览器缓存 Cache-Control: public # 允许中间代理缓存

func CountGoroutines

func CountGoroutines(d time.Duration, num uint8)

CountGoroutines 协程数量,间隔 duration 记录一次

func EtagHandler

func EtagHandler() gin.HandlerFunc

EtagHandler 添加 ETag 头,用于缓存静态资源

func Fail

func Fail(c ResponseWriter, err error, fn ...WithData)

Fail 通用错误返回

func GetBaseURL

func GetBaseURL(req *http.Request) string

GetBaseURL 提取请求地址 例如 http://127.0.0.1:8080/health 提取出 http://127.0.0.1:8080

func GetHost

func GetHost(c *http.Request) string

GetHost 提取主机 IP 或域名 例如 http://127.0.0.1:8080/health 提取出 127.0.0.1

func GetLevel added in v1.2.11

func GetLevel(c *gin.Context) int

func GetRole

func GetRole(c *gin.Context) string

GetRole 获取用户角色

func GetUID

func GetUID(c *gin.Context) int

GetUID 获取用户 ID

func GetUsername

func GetUsername(c *gin.Context) string

GetUsername 获取用户名

func HanddleJSONErr

func HanddleJSONErr(err error) error

func HandlerResponseMsg

func HandlerResponseMsg(resp http.Response) error

HandlerResponseMsg 获取响应的结果

func IPRateLimiter

func IPRateLimiter(r rate.Limit, b int) func(ip string) bool

IPRateLimiter IP 限流器

func IPRateLimiterForGin

func IPRateLimiterForGin(r rate.Limit, b int) gin.HandlerFunc

IPRateLimiter IP 限流器

func IgnorePrefix added in v1.3.0

func IgnorePrefix(prefix ...string) func(*gin.Context) bool

IgnorePrefix 忽略指定路由前缀

func IgoreContains added in v1.3.0

func IgoreContains(substrs ...string) func(*gin.Context) bool

IgoreContains 忽略包含的路由

func Limit

func Limit(v, minV, maxV int) int

Limit 限制数值在 min 和 max 之间

func Logger

func Logger(ignoreFn ...func(*gin.Context) bool) gin.HandlerFunc

Logger 记录 http 请求日志 入参是忽略函数,返回 true 则忽略,比如网页请求可以忽略

func LoggerWithBody added in v1.3.0

func LoggerWithBody(limit int, ignoreFn ...func(*gin.Context) bool) gin.HandlerFunc

LoggerWithBody 记录请求体与响应体,通常用于开发调试 日志级别是 debug,即没有忽略也可能因为日志级别不打印内容 limit 用于限制打印数据的大小,防止超大请求体或响应体

func Metrics

func Metrics() gin.HandlerFunc

Metrics ...

func MustTraceID

func MustTraceID(ctx context.Context) string

func NewToken

func NewToken(input TokenInput) (string, error)

NewToken 创建 token

func Offset

func Offset(page, size int) int

func RateLimiter

func RateLimiter(r rate.Limit, b int) gin.HandlerFunc

RateLimiter 限流器

func RecordResponse

func RecordResponse() gin.HandlerFunc

func Recover

func Recover() gin.HandlerFunc

Recover from panics and converts the panic to an error so it is reported in Metrics and handled in Errors.

func SendChunk

func SendChunk(ch <-chan Chunk, c *gin.Context)

SendChunk 发送分块数据

func SendChunkPro

func SendChunkPro(ch <-chan Chunk, c *gin.Context)

SendChunkPro 高性能版

func SendSSE

func SendSSE(ch <-chan EventMessage, c *gin.Context)

func SetDebug added in v1.2.0

func SetDebug()

func SetRelease

func SetRelease()

func SetTraceID

func SetTraceID(ctx *gin.Context, id string)

func SetupMutexProfile

func SetupMutexProfile(rate int)

SetupMutexProfile 启用互斥锁采样,rate=1 开启采样, rate<=0 关闭采样

func SetupPProf

func SetupPProf(r *gin.Engine, ips *[]string)

func Success

func Success(c HTTPContext, bean any)

Success 通用成功返回

func TraceID

func TraceID(ctx context.Context) (string, bool)

func WarpH

func WarpH[I any, O any](fn func(*gin.Context, *I) (O, error)) gin.HandlerFunc

WarpH 让函数更专注于业务,一般入参和出参应该是指针类型 没有入参时,应该使用 *struct{}

Types

type BufferWriter added in v1.3.0

type BufferWriter struct {
	gin.ResponseWriter
	// contains filtered or unexported fields
}

func (*BufferWriter) Unwrap added in v1.3.0

func (w *BufferWriter) Unwrap() http.ResponseWriter

func (*BufferWriter) Write added in v1.3.0

func (w *BufferWriter) Write(b []byte) (int, error)

type Chunk

type Chunk struct {
	Total   int    `json:"total"`
	Current int    `json:"current"`
	Success int    `json:"success"`
	Failure int    `json:"failure"`
	Err     string `json:"err,omitempty"`
}

type Claims

type Claims struct {
	UID      int
	Username string
	GroupID  int
	Role     string
	Level    int
	jwt.RegisteredClaims
}

Claims ...

func ParseToken

func ParseToken(tokenString string, secret string) (*Claims, error)

ParseToken 解析 token

type DateFilter

type DateFilter struct {
	StartMs int64 `form:"start_ms"`
	EndMs   int64 `form:"end_ms"`
}

DateFilter 日期区间过滤

func (DateFilter) DefaultEndAt

func (d DateFilter) DefaultEndAt(date time.Time) time.Time

DefaultEndAt 当为零值或不符合规则时,返回提供的默认值

func (DateFilter) DefaultStartAt

func (d DateFilter) DefaultStartAt(date time.Time) time.Time

DefaultStartAt 当为零值或不符合规则时,返回提供的默认值

func (DateFilter) EndAt

func (d DateFilter) EndAt() time.Time

EndAt 结束时间

func (DateFilter) StartAt

func (d DateFilter) StartAt() time.Time

StartAt 开始时间

type EtagWriter

type EtagWriter struct {
	gin.ResponseWriter
	// contains filtered or unexported fields
}

func (*EtagWriter) Unwrap

func (w *EtagWriter) Unwrap() http.ResponseWriter

func (*EtagWriter) Write

func (w *EtagWriter) Write(b []byte) (int, error)

type Event

type Event struct {
	ID    string
	Event string
	Data  []byte
}

type EventMessage

type EventMessage struct {
	// contains filtered or unexported fields
}

func NewEventMessage

func NewEventMessage(event string, data map[string]any) *EventMessage

type GoroutineNum

type GoroutineNum struct {
	Time string `json:"time"`
	Num  int    `json:"num"`
}

type HTTPContext

type HTTPContext interface {
	JSON(int, any)
	Header(key, value string)
	context.Context
}

type PageOutput

type PageOutput struct {
	Total int64 `json:"total"`
	Items any   `json:"items"`
}

PageOutput 分页数据

type PagerFilter

type PagerFilter struct {
	Page         int      `form:"page"`
	Size         int      `form:"size"`
	Sort         string   `form:"sort"`
	SortSafelist []string `json:"-"`
}

PagerFilter 分页过滤

func NewPagerFilterMaxSize

func NewPagerFilterMaxSize() PagerFilter

func (PagerFilter) Limit

func (f PagerFilter) Limit() int

Limit 每页 10~100 区间

func (PagerFilter) MustSortColumn

func (f PagerFilter) MustSortColumn() string

MustSortColumn 忽略安全问题

func (PagerFilter) Offset

func (f PagerFilter) Offset() int

Offset 计算偏离数值

func (PagerFilter) SortColumn

func (f PagerFilter) SortColumn() (string, error)

SortColumn 通过对 SortColumn 设置值,仅对允许的值做排序处理

func (PagerFilter) SortDirection

func (f PagerFilter) SortDirection() string

SortDirection 如果 sort 携带负号返回倒序,否则返回正序

type ResponseMsg

type ResponseMsg struct {
	Msg string `json:"msg"`
}

type ResponseWriter

type ResponseWriter interface {
	JSON(code int, obj interface{})
	File(filepath string)
	Set(string, any)
	context.Context
	AbortWithStatusJSON(code int, obj interface{})
}

ResponseWriter ...

type ResponseWriterWrapper

type ResponseWriterWrapper struct {
	gin.ResponseWriter
	Body *bytes.Buffer // 缓存
}

func (ResponseWriterWrapper) Write

func (w ResponseWriterWrapper) Write(b []byte) (int, error)

func (ResponseWriterWrapper) WriteString

func (w ResponseWriterWrapper) WriteString(s string) (int, error)

type SSE

type SSE struct {
	Headers map[string]string
	// contains filtered or unexported fields
}

SSE 发送事件

使用案例

http.HandleFunc("/stream", func(w http.ResponseWriter, r *http.Request) {
	sse := web.NewSSE(1024, time.Minute)

	go func(){
		defer sse.Close()
		for range 3 {
			sse.Publish(web.Event{
				ID:    uuid.New().String(),
				Event: "ping",
				Data: []byte("pong"),
			})
			time.Sleep(time.Second)
		}
	}()
	sse.ServeHTTP(w, r)
})

func NewSSE

func NewSSE(length int, timeout time.Duration) *SSE

func (*SSE) Close

func (s *SSE) Close()

func (*SSE) Publish

func (s *SSE) Publish(v Event)

func (*SSE) ServeHTTP

func (s *SSE) ServeHTTP(w http.ResponseWriter, req *http.Request)

type ScrollPager

type ScrollPager[T any] struct {
	Items []T    `json:"items"`
	Next  string `json:"next"`
}

ScrollPager 滚动翻页

type TokenInput

type TokenInput struct {
	UID      int
	GroupID  int
	Username string
	Secret   string
	Role     string
	Level    int
	Expires  time.Duration
}

type Validator

type Validator struct {
	Errors map[string]string
}

Validator 验证对象是否合法

func NewValidator

func NewValidator() *Validator

NewValidator ...

func (*Validator) AddError

func (v *Validator) AddError(key, message string) *Validator

AddError 添加错误

func (*Validator) Check

func (v *Validator) Check(ok bool, key, message string) *Validator

Check 如果 ok==false,则将 message 写入 errors

func (*Validator) List

func (v *Validator) List() []string

List 验证 !Valid() 后,可获取错误列表

func (*Validator) Result

func (v *Validator) Result() (bool, []string)

Result true 表示没有错误

func (*Validator) Valid

func (v *Validator) Valid() bool

Valid 如果没有错误,返回 true

type WithData

type WithData func(map[string]any)

Jump to

Keyboard shortcuts

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