gin

package module
v0.1.3 Latest Latest
Warning

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

Go to latest
Published: Mar 22, 2025 License: MIT Imports: 29 Imported by: 0

README

Gin Framework - Context扩展

Go Reference Go Report Card MIT License

Gin是一个高性能的Web框架,本项目在保持 Gin 高性能特性的同时,通过扩展 Context 和增加实用工具,简化了常见的 Web 开发任务,旨在提供简单易用的API和高效的路由处理。

特性

  • 统一的响应格式
  • 简化的参数获取
  • 文件上传处理
  • URL 构建工具
  • 增强的请求信息获取
  • 跨域(CORS)支持
  • 分页响应支持
  • 中间件机制
  • 服务器发送事件(SSE)支持
  • JWT认证系统(零依赖,基于标准库)
  • 数据验证辅助
  • 缓存控制方法
  • 安全性增强
  • 国际化支持
  • 会话管理工具
  • 缓存系统(内存缓存、列表缓存、持久化)

安装

go get github.com/darkit/gin

快速开始

基础路由
func main() {
    r := gin.Default()
    
    // 简单的 GET 请求处理
    r.GET("/ping", func(c *gin.Context) {
        c.Success("pong")
    })
    
    r.Run(":8080")
}
路由组和中间件
// 认证中间件
func AuthMiddleware(c *gin.Context) {
    token := c.GetToken()
    if token == "" {
        c.Forbidden("未授权访问")
        c.Abort()
        return
    }
    c.Next()
}

// 路由组使用
api := r.Group("/api", AuthMiddleware)
{
    api.GET("/users", ListUsers)
    api.POST("/users", CreateUser)
}
参数获取和验证
r.POST("/users", func(c *gin.Context) {
    // 必需参数验证
    if !c.RequireParams("username", "email") {
        return
    }

    // 获取参数
    username := c.Param("username")
    email := c.Param("email")
    age := c.ParamInt("age", 0) // 带默认值的整数参数

    // 处理逻辑...
    c.SuccessWithMsg("用户创建成功", gin.H{
        "username": username,
        "email": email,
        "age": age,
    })
})
文件上传
r.POST("/upload", func(c *gin.Context) {
    file, err := c.FormFile("file")
    if err != nil {
        c.Fail("文件上传失败")
        return
    }

    config := gin.UploadConfig{
        AllowedExts: []string{".jpg", ".png", ".pdf"},
        MaxSize:     10 * 1024 * 1024, // 10MB
        SavePath:    "./uploads",
    }

    filename, err := c.SaveUploadedFile(file, config)
    if err != nil {
        c.Fail("文件保存失败: " + err.Error())
        return
    }

    c.Success(gin.H{"filename": filename})
})
JWT认证
// 定义密钥(实际应用中应该从环境变量或配置中读取)
const secretKey = "your-secure-secret-key"

// 用户登录
r.POST("/login", func(c *gin.Context) {
    // 验证用户凭据...
    userID := "12345" // 验证成功后获取的用户ID
    
    // 创建JWT会话,有效期24小时
    token, err := c.CreateJWTSession(secretKey, userID, 24*time.Hour, gin.H{
        "username": "张三",
        "role": "admin",
    })
    
    if err != nil {
        c.Error("生成令牌失败: " + err.Error())
        return
    }
    
    c.Success(gin.H{"token": token})
})

// 需要认证的接口
r.GET("/protected", func(c *gin.Context) {
    // 验证JWT令牌并获取载荷
    payload, ok := c.RequireJWT(secretKey)
    if !ok {
        // RequireJWT已经设置了错误响应
        return
    }
    
    // 从载荷中获取用户信息
    userID := payload[gin.JWTClaimSub].(string)
    username, _ := payload["username"].(string)
    
    c.Success(gin.H{
        "message": "授权访问成功",
        "user_id": userID,
        "username": username,
    })
})

// 刷新令牌
r.GET("/refresh", func(c *gin.Context) {
    token, err := c.RefreshJWTSession(secretKey, 24*time.Hour)
    if err != nil {
        c.Fail("刷新令牌失败: " + err.Error())
        return
    }
    
    c.Success(gin.H{"token": token})
})

// 注销
r.GET("/logout", func(c *gin.Context) {
    c.ClearJWT()
    c.Success("已注销")
})
数据验证
// 定义带验证功能的结构体
type UserForm struct {
    Username string `json:"username" binding:"required"`
    Email    string `json:"email" binding:"required,email"`
    Age      int    `json:"age" binding:"min=0,max=120"`
}

// 实现Validator接口
func (u UserForm) Validate() (bool, string) {
    if len(u.Username) < 3 {
        return false, "用户名长度不能少于3个字符"
    }
    if !strings.Contains(u.Email, "@") {
        return false, "邮箱格式不正确"
    }
    if u.Age < 18 {
        return false, "年龄必须大于等于18岁"
    }
    return true, ""
}

// 在控制器中使用
r.POST("/users", func(c *gin.Context) {
    var form UserForm
    
    // 绑定JSON数据
    if !c.BindJSON(&form) {
        return
    }
    
    // 验证数据
    if !c.Validate(form) {
        return  // Validate会自动处理错误响应
    }
    
    // 数据验证通过,继续处理...
    c.Success(gin.H{"message": "用户创建成功"})
})
缓存控制
r.GET("/no-cache", func(c *gin.Context) {
    // 设置禁止缓存响应头
    c.NoCache()
    c.Success("这个响应不会被缓存")
})

r.GET("/cache", func(c *gin.Context) {
    // 设置缓存300秒
    c.Cache(300)
    c.Success("这个响应会被缓存5分钟")
})
安全增强
r.GET("/secure", func(c *gin.Context) {
    // 设置常用安全头
    c.SetSecureHeaders()
    
    // 设置内容安全策略
    c.SetCSP("default-src 'self'; script-src 'self' https://trusted.cdn.com;")
    
    // 设置X-Frame-Options以防止点击劫持
    c.SetXFrameOptions("DENY")
    
    c.Success("安全增强的响应")
})
获取切片参数
r.GET("/items", func(c *gin.Context) {
    // 获取整型ID列表,例如 ?ids=1,2,3
    ids := c.GetIntSlice("ids")
    
    // 获取字符串标签列表,例如 ?tags=go,web,api
    tags := c.GetStringSlice("tags")
    
    // 可以指定分隔符,例如 ?ids=1|2|3
    customIds := c.GetIntSlice("ids", "|")
    
    c.Success(gin.H{
        "ids": ids,
        "tags": tags,
        "custom_ids": customIds,
    })
})
分页处理
r.GET("/users", func(c *gin.Context) {
    // 从查询参数获取分页信息,默认页码1,每页10条
    page, pageSize := c.Paginate(20) // 可以指定默认每页大小
    
    // 使用分页参数查询数据库
    offset := (page - 1) * pageSize
    
    // 假设这里是从数据库查询的逻辑
    users := []gin.H{} // 数据库查询结果
    totalCount := int64(100) // 总记录数
    
    // 返回分页响应
    c.PageResponse(users, totalCount, page, pageSize)
})
会话管理
r.GET("/session", func(c *gin.Context) {
    // 设置会话数据
    c.SessionSet("user_id", "12345")
    c.SessionSet("logged_in", true)
    c.SessionSet("login_time", time.Now())
    
    c.Success("会话数据已设置")
})

r.GET("/profile", func(c *gin.Context) {
    // 获取会话数据
    userID := c.SessionGetString("user_id")
    isLoggedIn := c.SessionGetBool("logged_in")
    
    if !isLoggedIn {
        c.Forbidden("请先登录")
        return
    }
    
    c.Success(gin.H{
        "user_id": userID,
        "logged_in": isLoggedIn,
    })
})
国际化支持
r.GET("/welcome", func(c *gin.Context) {
    // 获取客户端语言
    lang := c.Language()
    
    // 根据语言返回不同的欢迎信息
    message := "欢迎使用"
    if strings.HasPrefix(lang, "en") {
        message = "Welcome"
    } else if strings.HasPrefix(lang, "ja") {
        message = "ようこそ"
    }
    
    c.Success(gin.H{"message": message, "language": lang})
})
服务器发送事件 (SSE)
// 创建 SSE Hub,配置历史记录大小
hub := r.NewSSEHub(20)
go hub.Run()

// 处理客户端连接,支持事件过滤
r.GET("/events", func(c *gin.Context) {
    // 创建客户端连接,并订阅特定事件
    client := c.NewSSEClient(hub, "user.created", "user.updated", "ping")
    
    // 可以设置自定义客户端ID
    customID := c.Query("client_id")
    if customID != "" {
        client.ID = customID
    }
    
    // 发送初始连接事件
    hub.SendToClient(client.ID, &gin.SSEEvent{
        Event: "user.created",
        Data:  gin.H{"message": "连接成功", "client_id": client.ID},
    })
    
    // 等待客户端断开连接
    <-client.Disconnected
})

// 广播消息到所有客户端
r.POST("/broadcast", func(c *gin.Context) {
    hub.BroadCast(&gin.SSEEvent{
        Event: "user.created",
        Data:  gin.H{"message": "这是广播消息"},
        ID:    fmt.Sprintf("%d", time.Now().UnixNano()),
    })
})

// 发送消息到指定客户端
r.POST("/send/:clientID", func(c *gin.Context) {
    clientID := c.Param("clientID")
    success := hub.SendToClient(clientID, &gin.SSEEvent{
        Event: "user.created",
        Data:  gin.H{"message": "这是定向消息"},
    })
    if success {
        c.Success("消息发送成功")
    } else {
        c.Fail("客户端不存在或已断开")
    }
})

// 获取所有在线客户端
r.GET("/clients", func(c *gin.Context) {
    clients := hub.GetClients()
    c.Success(gin.H{
        "clients": clients,
        "count":   len(clients),
    })
})

// Hub 管理接口
r.GET("/close", func(c *gin.Context) {
    hub.Close()
    c.Success("关闭成功")
})

r.GET("/restart", func(c *gin.Context) {
    if !hub.IsRunning() {
        hub.Restart()
        c.Success("重启成功")
    }
})

r.GET("/status", func(c *gin.Context) {
    c.Success(gin.H{"running": hub.IsRunning()})
})
SSE Hub 特性
  • 支持客户端事件过滤
  • 自动心跳检测
  • 断线自动清理
  • 消息历史记录
  • 支持自定义客户端ID
  • 支持广播和定向消息
  • Hub 状态管理
  • 优雅关闭和重启
客户端示例
// 建立 SSE 连接
const clientId = 'client_' + Date.now();
const evtSource = new EventSource('/events?client_id=' + clientId);

// 连接建立事件
evtSource.onopen = function() {
    console.log('SSE 连接已建立');
};

// 监听特定事件
evtSource.addEventListener('user.created', function(e) {
    const data = JSON.parse(e.data);
    console.log('收到用户创建事件:', data);
});

evtSource.addEventListener('user.updated', function(e) {
    const data = JSON.parse(e.data);
    console.log('收到用户更新事件:', data);
});

// 心跳事件
evtSource.addEventListener('ping', function(e) {
    console.log('收到心跳:', e.data);
});

// 错误处理
evtSource.onerror = function(e) {
    console.log('连接错误或关闭');
    evtSource.close();
};
注意事项
  1. SSE Hub 支持自动的心跳检测和断线清理
  2. 客户端可以通过事件过滤器只接收感兴趣的事件
  3. 支持消息历史记录,断线重连时可以补发消息
  4. Hub 提供了完整的状态管理和控制接口
  5. 建议在生产环境中适当配置心跳间隔和超时时间
URL 构建
// 创建URL构建器并链式调用相关方法
url := c.BuildUrl("/api/users").
       Set("page", 1).
       Set("size", 10).
       Domain("api.example.com").
       Scheme("https").
       Builder()

// 注意: 从2.0版本开始,URL构建器的方法已更改为私有方法
// 但仍然保持链式调用的便捷特性
请求信息获取
r.GET("/info", func(c *gin.Context) {
    info := gin.H{
        "method":      c.Method(),
        "host":        c.Host(),
        "domain":      c.Domain(),
        "subdomain":   c.SubDomain(),
        "scheme":      c.Scheme(),
        "path":        c.BaseURL(),
        "url":         c.URL(),
        "contentType": c.ContentType(),
        "isAjax":     c.IsAjax(),
        "isJson":     c.IsJson(),
        "isSsl":      c.IsSsl(),
        "clientIP":    c.GetIP(),
        "userAgent":   c.GetUserAgent(),
    }
    c.Success(info)
})
RESTful 资源路由
// 定义资源处理器
type UserResource struct {
    *gin.RestfulHandler
}

func (r *UserResource) Index(c *gin.Context)  { ... } // GET /users
func (r *UserResource) Show(c *gin.Context)   { ... } // GET /users/:id
func (r *UserResource) Create(c *gin.Context) { ... } // POST /users
func (r *UserResource) Update(c *gin.Context) { ... } // PUT /users/:id
func (r *UserResource) Delete(c *gin.Context) { ... } // DELETE /users/:id

// 注册资源路由
r.Resource("/users", &UserResource{})

// 带中间件的资源路由
api := r.Group("/api", AuthMiddleware)
api.Resource("/users", &UserResource{})
缓存系统
func main() {
    r := gin.Default()
    
    // 初始化全局缓存
    // 参数: 默认过期时间, 清理间隔
    cache := gin.SetGlobalCache(10*time.Minute, 30*time.Second)
    
    // 带持久化的缓存
    // gin.SetGlobalCacheWithPersistence(10*time.Minute, 30*time.Second, "./cache.dat", 5*time.Minute)
    
    r.GET("/cache/set", func(c *gin.Context) {
        // 设置缓存,可选过期时间(不传则使用默认过期时间)
        c.CacheSet("user:123", gin.H{"name": "张三", "age": 30}, 5*time.Minute)
        
        // 设置不同类型的缓存数据
        c.CacheSet("counter", 1)
        c.CacheSet("enabled", true)
        c.CacheSet("score", 95.5)
        
        c.Success("缓存已设置")
    })
    
    r.GET("/cache/get", func(c *gin.Context) {
        // 获取基本缓存
        value, exists := c.CacheGet("user:123")
        if !exists {
            c.Fail("缓存不存在")
            return
        }
        
        // 获取特定类型的缓存
        count, _ := c.CacheGetInt("counter")
        enabled, _ := c.CacheGetBool("enabled")
        score, _ := c.CacheGetFloat64("score")
        name, _ := c.CacheGetString("user:name")
        
        c.Success(gin.H{
            "user": value,
            "count": count,
            "enabled": enabled,
            "score": score,
            "name": name,
        })
    })
    
    r.GET("/cache/delete", func(c *gin.Context) {
        c.CacheDelete("user:123")
        c.Success("缓存已删除")
    })
    
    r.GET("/cache/clear", func(c *gin.Context) {
        c.CacheClear()
        c.Success("所有缓存已清除")
    })
    
    r.GET("/cache/keys", func(c *gin.Context) {
        keys := c.CacheKeys()
        c.Success(gin.H{"keys": keys, "count": len(keys)})
    })
    
    // 列表缓存操作
    r.GET("/cache/list", func(c *gin.Context) {
        // 设置列表缓存的过期时间
        c.CacheSetList("queue", 5*time.Minute)
        
        // 添加元素到列表头部
        c.CacheLPush("queue", "任务1", "任务2", "任务3")
        
        // 添加元素到列表尾部
        c.CacheRPush("queue", "任务4", "任务5")
        
        // 获取列表范围
        tasks := c.CacheLRange("queue", 0, -1)
        
        // 从列表头部弹出元素
        firstTask, _ := c.CacheLPop("queue")
        
        // 从列表尾部弹出元素
        lastTask, _ := c.CacheRPop("queue")
        
        // 获取指定位置的元素
        middleTask, _ := c.CacheLIndex("queue", 1)
        
        c.Success(gin.H{
            "all_tasks": tasks,
            "first_task": firstTask,
            "last_task": lastTask,
            "middle_task": middleTask,
        })
    })
    
    // 直接使用缓存实例进行高级操作
    r.GET("/cache/advanced", func(c *gin.Context) {
        cache := c.GetCache()
        
        // 检查TTL(过期时间)
        ttl, _ := cache.GetTTL("user:123")
        
        // 增加计数器
        cache.Increment("counter", 5)
        
        // 获取统计信息
        stats := cache.GetStats()
        
        // 交易操作
        tx := cache.BeginTransaction()
        tx.Set("tx_key", "事务值", 5*time.Minute)
        tx.LPush("tx_list", "事务列表值")
        tx.Commit()
        
        c.Success(gin.H{
            "ttl": ttl.Seconds(),
            "stats": stats,
        })
    })
    
    // 持久化操作
    r.GET("/cache/persist", func(c *gin.Context) {
        cache := c.GetCache()
        
        // 手动保存
        err := cache.Save()
        if err != nil {
            c.Fail("保存失败: " + err.Error())
            return
        }
        
        // 手动加载
        err = cache.Load()
        if err != nil {
            c.Fail("加载失败: " + err.Error())
            return
        }
        
        c.Success("持久化操作完成")
    })
    
    r.Run(":8080")
}
缓存系统特性
  • 内存缓存:高性能的键值对缓存
  • 列表缓存:支持列表操作,可用于实现队列、栈等数据结构
  • 类型安全:提供类型特定的获取方法,避免类型转换错误
  • 自动过期:支持TTL(生存时间)和自动清理过期项
  • 持久化:可将缓存保存到文件并从文件恢复
  • 自动持久化:支持定时自动保存到文件
  • 事务支持:提供事务接口进行原子操作
  • 统计信息:提供缓存使用统计和性能监控
  • 并发安全:所有操作都是线程安全的
  • 零依赖:纯Go实现,无外部依赖
缓存配置选项
// 创建缓存时的配置选项
cache := gin.SetGlobalCache(
    5*time.Minute,  // 默认过期时间
    30*time.Second, // 清理间隔
)

// 启用持久化
cache := gin.SetGlobalCacheWithPersistence(
    5*time.Minute,   // 默认过期时间
    30*time.Second,  // 清理间隔
    "./cache.dat",   // 持久化文件路径
    5*time.Minute,   // 自动保存间隔
)

统一响应格式

框架提供了统一的响应方法:

// 成功响应
c.Success(data)
c.SuccessWithMsg("操作成功", data)

// 失败响应
c.Fail("操作失败")
c.Error("服务器错误")
c.Forbidden("没有权限")
c.NotFound("资源不存在")
c.Unauthorized("未授权访问")
c.MethodNotAllowed()
c.ServiceUnavailable("服务暂时不可用")

// 分页响应
c.PageResponse(list, total, page, pageSize)

完整示例

请参考 examples/main.go 获取更详细的使用示例。

配置选项

// 设置运行模式
gin.SetMode(gin.DebugMode)   // 开发模式
gin.SetMode(gin.ReleaseMode) // 生产模式
gin.SetMode(gin.TestMode)    // 测试模式

// JSON 解码器配置
gin.EnableJsonDecoderUseNumber()
gin.EnableJsonDecoderDisallowUnknownFields()

// 禁用验证器
gin.DisableBindValidation()

安全最佳实践

使用框架提供的安全功能可以显著提高应用的安全性:

  1. 始终使用HTTPS(通过IsSsl()检测)
  2. 利用SetSecureHeaders()设置常用安全头
  3. JWT令牌存储在安全的HttpOnly Cookie中
  4. 正确设置内容安全策略(CSP)
  5. 实施适当的缓存控制策略
  6. 密钥和敏感配置应从环境变量加载,而不是硬编码

性能优化

  1. 框架保持了原生Gin的高性能特性
  2. 内部组件进行了私有化处理,减少了暴露的API表面积
  3. 针对高频操作提供了优化的方法
  4. SSE Hub实现了高效的客户端管理和消息派发
  5. 请求数据转换使用高效的内部缓存

许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

Documentation

Index

Constants

View Source
const (
	SuccessCode   = 200 // 成功状态码
	FailCode      = 400 // 失败状态码
	ErrorCode     = 500 // 错误状态码
	ForbiddenCode = 403 // 禁止访问状态码
	NotFound      = 404 // 资源不存在状态码
)
View Source
const (
	JWTHeaderKey = "Authorization"
	JWTQueryKey  = "token"
	JWTCookieKey = "jwt"
	JWTPrefix    = "Bearer "

	// JWT算法
	JWTAlgHS256 = "HS256" // HMAC-SHA256
	JWTAlgHS384 = "HS384" // HMAC-SHA384
	JWTAlgHS512 = "HS512" // HMAC-SHA512

	// JWT标准声明
	JWTClaimIss = "iss" // 签发者
	JWTClaimSub = "sub" // 主题
	JWTClaimAud = "aud" // 受众
	JWTClaimExp = "exp" // 过期时间
	JWTClaimNbf = "nbf" // 生效时间
	JWTClaimIat = "iat" // 签发时间
	JWTClaimJti = "jti" // JWT ID
)

JWT常量,保留公开因为它们是API契约的一部分

View Source
const (
	MethodAny     = "ANY"     // 任意方法
	MethodGet     = "GET"     // GET 请求
	MethodHead    = "HEAD"    // HEAD 请求
	MethodPost    = "POST"    // POST 请求
	MethodPut     = "PUT"     // PUT 请求
	MethodPatch   = "PATCH"   // PATCH 请求 (RFC 5789)
	MethodDelete  = "DELETE"  // DELETE 请求
	MethodConnect = "CONNECT" // CONNECT 请求
	MethodOptions = "OPTIONS" // OPTIONS 请求
	MethodTrace   = "TRACE"   // TRACE 请求
)

常用 HTTP 方法常量

View Source
const (
	EnvGinMode = "GIN_MODE"

	DebugMode   = "debug"
	ReleaseMode = "release"
	TestMode    = "test"
)

Variables

This section is empty.

Functions

func DisableBindValidation

func DisableBindValidation()

DisableBindValidation 关闭默认的验证器。

func EnableJsonDecoderDisallowUnknownFields

func EnableJsonDecoderDisallowUnknownFields()

EnableJsonDecoderDisallowUnknownFields 设置 binding.EnableDecoderDisallowUnknownFields 为 true,以调用 JSON 解码器实例的 DisallowUnknownFields 方法。

func EnableJsonDecoderUseNumber

func EnableJsonDecoderUseNumber()

EnableJsonDecoderUseNumber 设置 binding.EnableDecoderUseNumber 为 true,以调用 JSON 解码器实例的 UseNumber 方法。

func SetMode

func SetMode(value string)

SetMode 根据输入字符串设置 gin 模式。

Types

type BasicHandler

type BasicHandler struct {
	Handlers map[string]HandlerFunc
}

BasicHandler 结构体用于存储处理函数

func NewBasicHandler added in v0.1.1

func NewBasicHandler() *BasicHandler

NewBasicHandler 创建一个新的基本处理器

func (*BasicHandler) Clone added in v0.1.1

func (b *BasicHandler) Clone() Handler

Clone 克隆当前处理器实例

func (*BasicHandler) GetHandler

func (b *BasicHandler) GetHandler(action string) (HandlerFunc, bool)

GetHandler 方法根据动作获取处理函数 返回处理函数和是否找到的布尔值

func (*BasicHandler) SetHandler

func (b *BasicHandler) SetHandler(action string, handlerFunc HandlerFunc)

SetHandler 方法用于设置处理函数

type Cache added in v0.1.2

type Cache[K comparable, V any] struct {
	// contains filtered or unexported fields
}

Cache 是一个综合的缓存实现,支持内存缓存和列表缓存

func NewCache added in v0.1.2

func NewCache[K comparable, V any](defaultExpiration, cleanupInterval time.Duration) *Cache[K, V]

NewCache 创建一个新的综合缓存 defaultExpiration: 默认的过期时间 cleanupInterval: 清理过期项的间隔时间

func SetGlobalCache added in v0.1.2

func SetGlobalCache(defaultExpiration, cleanupInterval time.Duration) *Cache[string, any]

初始化全局缓存

func SetGlobalCacheWithPersistence added in v0.1.2

func SetGlobalCacheWithPersistence(defaultExpiration, cleanupInterval time.Duration, persistPath string, autoPersistInterval time.Duration) *Cache[string, any]

初始化带持久化的全局缓存

func (*Cache[K, V]) BLPop added in v0.1.2

func (c *Cache[K, V]) BLPop(key K, timeout time.Duration) (V, bool)

BLPop 阻塞版本的LPop,不支持真正的阻塞,但可以模拟轮询 timeout为等待时间,0表示无限等待

func (*Cache[K, V]) BRPop added in v0.1.2

func (c *Cache[K, V]) BRPop(key K, timeout time.Duration) (V, bool)

BRPop 阻塞版本的RPop,不支持真正的阻塞,但可以模拟轮询 timeout为等待时间,0表示无限等待

func (*Cache[K, V]) BRPopLPush added in v0.1.2

func (c *Cache[K, V]) BRPopLPush(source K, destination K, timeout time.Duration) (V, bool)

BRPopLPush 阻塞版本的RPoplPush timeout为等待时间,0表示无限等待

func (*Cache[K, V]) BeginTransaction added in v0.1.2

func (c *Cache[K, V]) BeginTransaction() *Transaction[K, V]

BeginTransaction 开始一个新事务

func (*Cache[K, V]) Clear added in v0.1.2

func (c *Cache[K, V]) Clear()

Clear 清空缓存

func (*Cache[K, V]) Close added in v0.1.2

func (c *Cache[K, V]) Close()

Close 停止清理过期项和自动持久化的goroutine

func (*Cache[K, V]) Count added in v0.1.2

func (c *Cache[K, V]) Count() int

Count 返回缓存中的普通项目数量

func (*Cache[K, V]) Dec added in v0.1.3

func (c *Cache[K, V]) Dec(key K, decrement any) (any, error)

Dec 对数值类型进行减少操作

func (*Cache[K, V]) DecAtomic added in v0.1.3

func (c *Cache[K, V]) DecAtomic(key K, n int64) (int64, error)

DecAtomic 原子减少整数值

func (*Cache[K, V]) Delete added in v0.1.2

func (c *Cache[K, V]) Delete(key K)

Delete 删除缓存项

func (*Cache[K, V]) DeleteExpired added in v0.1.2

func (c *Cache[K, V]) DeleteExpired()

DeleteExpired 删除所有过期的项

func (*Cache[K, V]) DeleteList added in v0.1.2

func (c *Cache[K, V]) DeleteList(key K)

DeleteList 删除列表

func (*Cache[K, V]) DisableAutoPersist added in v0.1.2

func (c *Cache[K, V]) DisableAutoPersist()

DisableAutoPersist 禁用自动持久化

func (*Cache[K, V]) EnableAutoPersist added in v0.1.2

func (c *Cache[K, V]) EnableAutoPersist()

EnableAutoPersist 启用自动持久化

func (*Cache[K, V]) Flush added in v0.1.2

func (c *Cache[K, V]) Flush() error

Flush 清除所有数据并删除持久化文件

func (*Cache[K, V]) ForEach added in v0.1.2

func (c *Cache[K, V]) ForEach(fn func(key K, value V) bool)

ForEach 遍历所有未过期的缓存项并对每一项执行指定的函数

func (*Cache[K, V]) ForEachList added in v0.1.2

func (c *Cache[K, V]) ForEachList(fn func(key K, list []V) bool)

ForEachList 遍历所有未过期的列表

func (*Cache[K, V]) Get added in v0.1.2

func (c *Cache[K, V]) Get(key K) (V, bool)

Get 获取缓存项

func (*Cache[K, V]) GetListTTL added in v0.1.2

func (c *Cache[K, V]) GetListTTL(key K) (time.Duration, bool)

GetListTTL 获取列表键的剩余生存时间

func (*Cache[K, V]) GetStats added in v0.1.2

func (c *Cache[K, V]) GetStats() Stats

GetStats 获取缓存统计信息

func (*Cache[K, V]) GetTTL added in v0.1.2

func (c *Cache[K, V]) GetTTL(key K) (time.Duration, bool)

GetTTL 获取键的剩余生存时间

func (*Cache[K, V]) GetWithTTL added in v0.1.2

func (c *Cache[K, V]) GetWithTTL(key K) (V, time.Duration, bool)

GetWithTTL 获取缓存项及其剩余生存时间

func (*Cache[K, V]) Has added in v0.1.2

func (c *Cache[K, V]) Has(key K) bool

Has 检查键是否存在且未过期

func (*Cache[K, V]) HasList added in v0.1.2

func (c *Cache[K, V]) HasList(key K) bool

HasList 检查列表键是否存在且未过期

func (*Cache[K, V]) Inc added in v0.1.3

func (c *Cache[K, V]) Inc(key K, increment any) (any, error)

Inc 对数值类型进行增加操作

func (*Cache[K, V]) IncAtomic added in v0.1.3

func (c *Cache[K, V]) IncAtomic(key K, n int64) (int64, error)

IncAtomic 原子增加整数值

func (*Cache[K, V]) Keys added in v0.1.2

func (c *Cache[K, V]) Keys() []K

Keys 返回所有的普通缓存键

func (*Cache[K, V]) LIndex added in v0.1.2

func (c *Cache[K, V]) LIndex(key K, index int) (V, bool)

LIndex 返回列表中指定位置的元素

func (*Cache[K, V]) LInsert added in v0.1.2

func (c *Cache[K, V]) LInsert(key K, before bool, pivot V, value V, equals func(a, b V) bool) int

LInsert 在列表的指定位置插入元素 before == true表示在pivot之前插入 before == false表示在pivot之后插入

func (*Cache[K, V]) LPop added in v0.1.2

func (c *Cache[K, V]) LPop(key K) (V, bool)

LPop 移除并返回列表的第一个元素

func (*Cache[K, V]) LPush added in v0.1.2

func (c *Cache[K, V]) LPush(key K, values ...V) int

LPush 将一个或多个值插入到列表头部

func (*Cache[K, V]) LRange added in v0.1.2

func (c *Cache[K, V]) LRange(key K, start, stop int) []V

LRange 返回列表中指定范围内的元素

func (*Cache[K, V]) LRem added in v0.1.2

func (c *Cache[K, V]) LRem(key K, count int, value V, equals func(a, b V) bool) int

LRem 从列表中移除元素

func (*Cache[K, V]) LSet added in v0.1.2

func (c *Cache[K, V]) LSet(key K, index int, value V) bool

LSet 通过索引来设置列表元素的值

func (*Cache[K, V]) LTrim added in v0.1.2

func (c *Cache[K, V]) LTrim(key K, start, stop int) bool

LTrim 对一个列表进行修剪,只保留指定区间内的元素

func (*Cache[K, V]) ListCount added in v0.1.2

func (c *Cache[K, V]) ListCount() int

ListCount 返回列表数量

func (*Cache[K, V]) ListKeys added in v0.1.2

func (c *Cache[K, V]) ListKeys() []K

ListKeys 返回所有的列表键

func (*Cache[K, V]) Load added in v0.1.2

func (c *Cache[K, V]) Load() error

Load 从文件加载缓存

func (*Cache[K, V]) LoadOrInit added in v0.1.2

func (c *Cache[K, V]) LoadOrInit() error

LoadOrInit 从文件加载缓存,如果文件不存在则初始化一个新的缓存

func (*Cache[K, V]) RPop added in v0.1.2

func (c *Cache[K, V]) RPop(key K) (V, bool)

RPop 移除并返回列表的最后一个元素

func (*Cache[K, V]) RPoplPush added in v0.1.2

func (c *Cache[K, V]) RPoplPush(source K, destination K) (V, bool)

RPoplPush 移除列表的最后一个元素,并将该元素添加到另一个列表的头部

func (*Cache[K, V]) RPush added in v0.1.2

func (c *Cache[K, V]) RPush(key K, values ...V) int

RPush 将一个或多个值插入到列表尾部

func (*Cache[K, V]) Save added in v0.1.2

func (c *Cache[K, V]) Save() error

Save 将缓存保存到文件

func (*Cache[K, V]) Set added in v0.1.2

func (c *Cache[K, V]) Set(key K, value V, duration ...time.Duration)

Set 设置缓存项,可选过期时间。不传递过期时间时使用默认过期时间

func (*Cache[K, V]) SetList added in v0.1.2

func (c *Cache[K, V]) SetList(key K, duration ...time.Duration)

SetList 设置列表的过期时间,不传递过期时间时使用默认过期时间

func (*Cache[K, V]) WithPersistence added in v0.1.2

func (c *Cache[K, V]) WithPersistence(persistPath string, autoPersistInterval time.Duration) *Cache[K, V]

WithPersistence 配置持久化选项

type Context

type Context struct {
	*gin.Context
	// contains filtered or unexported fields
}

func (*Context) AllowCORS

func (c *Context) AllowCORS()

AllowCORS 允许跨域请求

func (*Context) BaseURL

func (c *Context) BaseURL() string

BaseURL 获取当前请求的基本URL(不含QUERY_STRING)

func (*Context) BindAndValidate added in v0.1.1

func (c *Context) BindAndValidate(obj interface{}) bool

BindAndValidate 绑定并验证请求数据

func (*Context) BindForm added in v0.1.1

func (c *Context) BindForm(obj interface{}) bool

BindForm 绑定表单参数并处理错误

func (*Context) BindHeader added in v0.1.1

func (c *Context) BindHeader(obj interface{}) bool

BindHeader 绑定Header参数并处理错误

func (*Context) BindJSON added in v0.1.1

func (c *Context) BindJSON(obj interface{}) bool

BindJSON 绑定JSON请求数据并处理错误

func (*Context) BindQuery added in v0.1.1

func (c *Context) BindQuery(obj interface{}) bool

BindQuery 绑定查询参数并处理错误

func (*Context) BindUri added in v0.1.1

func (c *Context) BindUri(obj interface{}) bool

BindUri 绑定URI参数并处理错误

func (*Context) BuildUrl

func (c *Context) BuildUrl(path string) *urlBuilder

BuildUrl 创建一个 urlBuilder 实例

func (*Context) Cache added in v0.1.1

func (c *Context) Cache(seconds int)

Cache 设置缓存的Header

func (*Context) CacheClear added in v0.1.2

func (c *Context) CacheClear()

清空缓存

func (*Context) CacheDelete added in v0.1.2

func (c *Context) CacheDelete(key string)

从缓存删除值

func (*Context) CacheDeleteList added in v0.1.2

func (c *Context) CacheDeleteList(key string)

删除列表缓存

func (*Context) CacheGet added in v0.1.2

func (c *Context) CacheGet(key string) (any, bool)

从缓存获取值

func (*Context) CacheGetBool added in v0.1.2

func (c *Context) CacheGetBool(key string) (bool, bool)

从缓存获取布尔值

func (*Context) CacheGetFloat64 added in v0.1.2

func (c *Context) CacheGetFloat64(key string) (float64, bool)

从缓存获取浮点值

func (*Context) CacheGetInt added in v0.1.2

func (c *Context) CacheGetInt(key string) (int, bool)

从缓存获取整数值

func (*Context) CacheGetString added in v0.1.2

func (c *Context) CacheGetString(key string) (string, bool)

从缓存获取字符串值

func (*Context) CacheHas added in v0.1.2

func (c *Context) CacheHas(key string) bool

检查缓存中是否存在键

func (*Context) CacheHasList added in v0.1.2

func (c *Context) CacheHasList(key string) bool

检查列表缓存是否存在

func (*Context) CacheKeys added in v0.1.2

func (c *Context) CacheKeys() []string

获取缓存中所有键

func (*Context) CacheLIndex added in v0.1.2

func (c *Context) CacheLIndex(key string, index int) (any, bool)

获取列表缓存指定索引的元素

func (*Context) CacheLPop added in v0.1.2

func (c *Context) CacheLPop(key string) (any, bool)

从列表缓存头部弹出元素

func (*Context) CacheLPush added in v0.1.2

func (c *Context) CacheLPush(key string, values ...any) int

向列表缓存头部添加元素

func (*Context) CacheLRange added in v0.1.2

func (c *Context) CacheLRange(key string, start, stop int) []any

获取列表缓存的范围元素

func (*Context) CacheRPop added in v0.1.2

func (c *Context) CacheRPop(key string) (any, bool)

从列表缓存尾部弹出元素

func (*Context) CacheRPush added in v0.1.2

func (c *Context) CacheRPush(key string, values ...any) int

向列表缓存尾部添加元素

func (*Context) CacheSet added in v0.1.2

func (c *Context) CacheSet(key string, value any, duration ...time.Duration)

设置缓存值

func (*Context) CacheSetList added in v0.1.2

func (c *Context) CacheSetList(key string, duration ...time.Duration)

设置列表缓存

func (*Context) ClearJWT added in v0.1.1

func (c *Context) ClearJWT()

ClearJWT 清除JWT令牌

func (*Context) ContentType

func (c *Context) ContentType() string

ContentType 获取当前请求的CONTENT_TYPE

func (*Context) CreateJWTSession added in v0.1.1

func (c *Context) CreateJWTSession(secretKey string, userID string, expiration time.Duration, extraClaims ...map[string]interface{}) (string, error)

CreateJWTSession 使用JWT创建用户会话

func (*Context) Domain

func (c *Context) Domain() string

Domain 获取当前包含协议的域名

func (*Context) Download added in v0.1.1

func (c *Context) Download(filepath, filename string)

Download 下载文件

func (*Context) Dump added in v0.1.1

func (c *Context) Dump() H

Dump 获取请求详细信息(调试用)

func (*Context) Error

func (c *Context) Error(msg string, url ...string)

Error 错误响应

func (*Context) Ext

func (c *Context) Ext() string

Ext 获取当前URL的访问后缀

func (*Context) Fail

func (c *Context) Fail(msg string, url ...string)

Fail 失败响应

func (*Context) FailWithData

func (c *Context) FailWithData(msg string, data interface{}, url ...string)

FailWithData 失败响应(带数据)

func (*Context) Forbidden

func (c *Context) Forbidden(msg string, url ...string)

Forbidden 禁止访问响应

func (*Context) GenerateJWT added in v0.1.1

func (c *Context) GenerateJWT(secretKey string, payload JWTPayload) (string, error)

GenerateJWT 生成JWT令牌

func (*Context) GetCache added in v0.1.2

func (c *Context) GetCache() *Cache[string, any]

获取缓存实例

func (*Context) GetIP

func (c *Context) GetIP() string

GetIP 获取请求IP

func (*Context) GetIntSlice added in v0.1.1

func (c *Context) GetIntSlice(key string, sep ...string) []int

GetIntSlice 获取整型切片

func (*Context) GetJWT added in v0.1.1

func (c *Context) GetJWT() string

GetJWT 获取JWT令牌

func (*Context) GetStringSlice added in v0.1.1

func (c *Context) GetStringSlice(key string, sep ...string) []string

GetStringSlice 获取字符串切片

func (*Context) GetToken

func (c *Context) GetToken(name ...string) string

GetToken 从请求头获取Token

func (*Context) GetUserAgent

func (c *Context) GetUserAgent() string

GetUserAgent 获取用户代理信息

func (*Context) Host

func (c *Context) Host() string

Host 获取当前请求的主机名

func (*Context) IsAjax

func (c *Context) IsAjax() bool

IsAjax 判断是否是Ajax请求

func (*Context) IsConnect

func (c *Context) IsConnect() bool

IsConnect 判断是否Connect请求

func (*Context) IsDelete

func (c *Context) IsDelete() bool

IsDelete 判断是否Delete请求

func (*Context) IsGet

func (c *Context) IsGet() bool

IsGet 判断是否GET请求

func (*Context) IsHead

func (c *Context) IsHead() bool

IsHead 判断是否Head请求

func (*Context) IsJson

func (c *Context) IsJson() bool

IsJson 判断是否是Json请求

func (*Context) IsOptions

func (c *Context) IsOptions() bool

IsOptions 判断是否Options请求

func (*Context) IsPatch

func (c *Context) IsPatch() bool

IsPatch 判断是否Patch请求

func (*Context) IsPjax

func (c *Context) IsPjax() bool

IsPjax 判断是否是Pjax请求

func (*Context) IsPost

func (c *Context) IsPost() bool

IsPost 判断是否Post请求

func (*Context) IsPut

func (c *Context) IsPut() bool

IsPut 判断是否Put请求

func (*Context) IsSsl

func (c *Context) IsSsl() bool

IsSsl 判断是否是SSL

func (*Context) IsTrace

func (c *Context) IsTrace() bool

IsTrace 判断是否Trace请求

func (*Context) Language added in v0.1.1

func (c *Context) Language() string

Language 获取客户端语言

func (*Context) Method

func (c *Context) Method() string

Method 获取当前请求的方法

func (*Context) MethodNotAllowed added in v0.1.1

func (c *Context) MethodNotAllowed()

MethodNotAllowed 方法不允许响应

func (*Context) NewSSEClient added in v0.1.1

func (c *Context) NewSSEClient(hub *SSEHub, filters ...string) *_SSEClient

NewSSEClient 创建新的 SSE 客户端连接

func (*Context) NoCache added in v0.1.1

func (c *Context) NoCache()

NoCache 设置禁止缓存的Header

func (*Context) NotFound

func (c *Context) NotFound(msg string, url ...string)

NotFound 资源不存在响应

func (*Context) PageResponse

func (c *Context) PageResponse(list any, totalCount int64, currentPage, pageSize int)

PageResponse 分页响应方法,适配新的结构体

func (*Context) Paginate added in v0.1.1

func (c *Context) Paginate(defaultPageSize ...int) (page, pageSize int)

Paginate 分页参数处理

func (*Context) PanDomain

func (c *Context) PanDomain() string

PanDomain 获取当前访问的泛域名

func (*Context) Param

func (c *Context) Param(param string, defaultValue ...string) string

Param 获取当前请求的变量

func (*Context) ParamInt added in v0.1.1

func (c *Context) ParamInt(param string, defaultValue ...int) int

ParamInt 获取当前请求的变量

func (*Context) ParseJWTPayload added in v0.1.1

func (c *Context) ParseJWTPayload(token string) (JWTPayload, error)

ParseJWTPayload 解析JWT载荷(不验证签名)

func (*Context) Port

func (c *Context) Port() string

Port 获取当前请求的端口

func (*Context) Protocol

func (c *Context) Protocol() string

Protocol 获取当前请求的协议

func (*Context) Redirect

func (c *Context) Redirect(location string)

Redirect 临时重定向

func (*Context) RedirectPermanent

func (c *Context) RedirectPermanent(location string)

RedirectPermanent 永久重定向

func (*Context) RefreshJWTSession added in v0.1.1

func (c *Context) RefreshJWTSession(secretKey string, expiration time.Duration) (string, error)

RefreshJWTSession 刷新JWT会话

func (*Context) RemotePort

func (c *Context) RemotePort() string

RemotePort 获取当前请求的REMOTE_PORT

func (*Context) RequestInfo added in v0.1.1

func (c *Context) RequestInfo() H

RequestInfo 获取请求信息

func (*Context) RequireJWT added in v0.1.1

func (c *Context) RequireJWT(secretKey string) (JWTPayload, bool)

RequireJWT 要求JWT令牌有效并返回载荷

func (*Context) RequireParams

func (c *Context) RequireParams(params ...string) bool

RequireParams 检查必需参数

func (*Context) Response

func (c *Context) Response(httpStatus, code int, msg string, data interface{}, url ...string)

Response 自定义响应

func (*Context) RootDomain

func (c *Context) RootDomain() string

RootDomain 获取当前访问的根域名

func (*Context) SaveUploadedFile

func (c *Context) SaveUploadedFile(file *multipart.FileHeader, config UploadConfig) (string, error)

SaveUploadedFile 保存上传文件

func (*Context) Scheme

func (c *Context) Scheme() string

Scheme 获取当前请求的协议

func (*Context) ServiceUnavailable added in v0.1.1

func (c *Context) ServiceUnavailable(msg string)

ServiceUnavailable 服务不可用响应

func (*Context) SessionGet added in v0.1.1

func (c *Context) SessionGet(key string) (interface{}, bool)

SessionGet 获取会话数据

func (*Context) SessionGetBool added in v0.1.1

func (c *Context) SessionGetBool(key string) bool

SessionGetBool 获取布尔类型的会话数据

func (*Context) SessionGetInt added in v0.1.1

func (c *Context) SessionGetInt(key string) int

SessionGetInt 获取整数类型的会话数据

func (*Context) SessionGetString added in v0.1.1

func (c *Context) SessionGetString(key string) string

SessionGetString 获取字符串类型的会话数据

func (*Context) SessionSet added in v0.1.1

func (c *Context) SessionSet(key string, value interface{})

SessionSet 设置会话数据

func (*Context) SetCSP added in v0.1.1

func (c *Context) SetCSP(policy string)

SetCSP 设置内容安全策略

func (*Context) SetJWT added in v0.1.1

func (c *Context) SetJWT(token string, maxAge int)

SetJWT 设置JWT令牌到Cookie

func (*Context) SetSecureHeaders added in v0.1.1

func (c *Context) SetSecureHeaders()

SetSecureHeaders 设置常用安全头

func (*Context) SetXFrameOptions added in v0.1.1

func (c *Context) SetXFrameOptions(option string)

SetXFrameOptions 设置X-Frame-Options

func (*Context) SetXSSProtection added in v0.1.1

func (c *Context) SetXSSProtection()

SetXSSProtection 设置XSS保护

func (*Context) StreamFile added in v0.1.1

func (c *Context) StreamFile(filepath string)

StreamFile 流式传输文件

func (*Context) SubDomain

func (c *Context) SubDomain() string

SubDomain 获取当前访问的子域名

func (*Context) Success

func (c *Context) Success(data interface{}, url ...string)

Success 成功响应

func (*Context) SuccessWithMsg

func (c *Context) SuccessWithMsg(msg string, data interface{}, url ...string)

SuccessWithMsg 成功响应(自定义消息)

func (*Context) Time

func (c *Context) Time() time.Time

Time 获取当前请求的时间

func (*Context) Type

func (c *Context) Type() string

Type 获取当前请求的资源类型

func (*Context) URL

func (c *Context) URL() string

URL 获取当前请求的完整URL

func (*Context) Unauthorized added in v0.1.1

func (c *Context) Unauthorized(msg string)

Unauthorized 未授权响应

func (*Context) Validate added in v0.1.1

func (c *Context) Validate(v Validator) bool

Validate 验证数据

func (*Context) ValidateFile

func (c *Context) ValidateFile(file *multipart.FileHeader, config UploadConfig) error

ValidateFile 验证上传文件

func (*Context) ValidateJWT added in v0.1.1

func (c *Context) ValidateJWT(secretKey string, token string) (JWTPayload, error)

ValidateJWT 验证JWT令牌

func (*Context) ValidateWithCode added in v0.1.1

func (c *Context) ValidateWithCode(v Validator, code int) bool

ValidateWithCode 带状态码的验证数据

type H

type H map[string]any

type Handler

type Handler interface {
	GetHandler(action string) (HandlerFunc, bool)
	SetHandler(action string, handlerFunc HandlerFunc)
	Clone() Handler
}

Handler 接口定义了处理程序的基本方法

type HandlerFunc

type HandlerFunc func(*Context)

HandlerFunc 定义处理函数类型

type HandlerWrapper added in v0.1.1

type HandlerWrapper struct {
	Handler     Handler                // 原始处理器
	Middlewares []HandlerFunc          // 中间件列表
	Cache       map[string]HandlerFunc // 中间件缓存
}

HandlerWrapper 封装了 Handler 便于添加中间件

func NewHandlerWrapper added in v0.1.1

func NewHandlerWrapper(handler Handler) *HandlerWrapper

NewHandlerWrapper 创建新的处理器包装器

func (*HandlerWrapper) Clone added in v0.1.1

func (hw *HandlerWrapper) Clone() Handler

Clone 克隆处理器包装器

func (*HandlerWrapper) GetHandler added in v0.1.1

func (hw *HandlerWrapper) GetHandler(action string) (HandlerFunc, bool)

GetHandler 获取添加了中间件的处理函数

func (*HandlerWrapper) SetHandler added in v0.1.1

func (hw *HandlerWrapper) SetHandler(action string, handlerFunc HandlerFunc)

SetHandler 设置处理函数

func (*HandlerWrapper) UseMiddleware added in v0.1.1

func (hw *HandlerWrapper) UseMiddleware(middlewares ...HandlerFunc)

UseMiddleware 添加中间件

type JWTPayload added in v0.1.1

type JWTPayload map[string]interface{}

JWTPayload JWT载荷(保留公开因为它是API的一部分)

func (JWTPayload) SetAudience added in v0.1.1

func (p JWTPayload) SetAudience(audience string) JWTPayload

func (JWTPayload) SetExpiresAt added in v0.1.1

func (p JWTPayload) SetExpiresAt(expiresAt time.Time) JWTPayload

func (JWTPayload) SetIssuedAt added in v0.1.1

func (p JWTPayload) SetIssuedAt(issuedAt time.Time) JWTPayload

func (JWTPayload) SetIssuer added in v0.1.1

func (p JWTPayload) SetIssuer(issuer string) JWTPayload

SetIssuer 设置JWT标准声明

func (JWTPayload) SetJWTID added in v0.1.1

func (p JWTPayload) SetJWTID(jwtID string) JWTPayload

func (JWTPayload) SetNotBefore added in v0.1.1

func (p JWTPayload) SetNotBefore(notBefore time.Time) JWTPayload

func (JWTPayload) SetSubject added in v0.1.1

func (p JWTPayload) SetSubject(subject string) JWTPayload

type ListResponse added in v0.1.1

type ListResponse struct {
	Data       any        `json:"data"`       // 数据列表,使用更通用的名称
	Pagination Pagination `json:"pagination"` // 分页信息,使用更专业的命名
}

ListResponse 通用列表响应结构体

type Pagination added in v0.1.1

type Pagination struct {
	CurrentPage int   `json:"current_page"`          // 当前页码,使用下划线风格的JSON标签
	PageSize    int   `json:"page_size"`             // 每页数量
	TotalCount  int64 `json:"total_count"`           // 总数据量,使用更准确的命名
	TotalPages  int   `json:"total_pages,omitempty"` // 总页数(可选)
}

Pagination 分页信息结构体

type ResourceHandler added in v0.1.1

type ResourceHandler interface {
	Index(*Context)  // GET /resources      - 列表
	Show(*Context)   // GET /resources/:id  - 详情
	Create(*Context) // POST /resources     - 创建
	Update(*Context) // PUT /resources/:id  - 更新
	Delete(*Context) // DELETE /resources/:id - 删除
}

ResourceHandler 定义资源处理器接口

type RestfulHandler added in v0.1.1

type RestfulHandler struct{}

RestfulHandler 提供 ResourceHandler 接口的默认实现

func (*RestfulHandler) Create added in v0.1.1

func (h *RestfulHandler) Create(c *Context)

func (*RestfulHandler) Delete added in v0.1.1

func (h *RestfulHandler) Delete(c *Context)

func (*RestfulHandler) Index added in v0.1.1

func (h *RestfulHandler) Index(c *Context)

func (*RestfulHandler) Show added in v0.1.1

func (h *RestfulHandler) Show(c *Context)

func (*RestfulHandler) Update added in v0.1.1

func (h *RestfulHandler) Update(c *Context)

type Router added in v0.1.1

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

Router 路由管理器

func Default

func Default() *Router

Default 创建默认的路由管理器(包含 Logger 和 Recovery 中间件)

func New

func New() *Router

New 创建新的路由管理器

func (*Router) ANY added in v0.1.1

func (r *Router) ANY(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*Router) CONNECT added in v0.1.1

func (r *Router) CONNECT(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*Router) DELETE added in v0.1.1

func (r *Router) DELETE(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*Router) Engine added in v0.1.1

func (r *Router) Engine() *gin.Engine

Engine 获取原始 gin.Engine

func (*Router) GET added in v0.1.1

func (r *Router) GET(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*Router) Group added in v0.1.1

func (r *Router) Group(path string, middleware ...HandlerFunc) *RouterGroup

Group 创建或获取路由组

func (*Router) HEAD added in v0.1.1

func (r *Router) HEAD(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*Router) NewSSEHub added in v0.1.1

func (r *Router) NewSSEHub(size ...int) *SSEHub

NewSSEHub 创建新的 SSE Hub

size 设置历史记录大小

func (*Router) OPTIONS added in v0.1.1

func (r *Router) OPTIONS(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*Router) PATCH added in v0.1.1

func (r *Router) PATCH(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*Router) POST added in v0.1.1

func (r *Router) POST(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*Router) PUT added in v0.1.1

func (r *Router) PUT(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*Router) Register added in v0.1.1

func (r *Router) Register(method, path string, handler HandlerFunc, middleware ...HandlerFunc)

Register 注册路由

func (*Router) Resource added in v0.1.1

func (r *Router) Resource(path string, handler ResourceHandler, middleware ...HandlerFunc)

Resource 注册 RESTful 资源路由

func (*Router) Run added in v0.1.1

func (r *Router) Run(addr ...string) error

Run 启动服务器

func (*Router) RunTLS added in v0.1.1

func (r *Router) RunTLS(addr, certFile, keyFile string) error

RunTLS 使用TLS运行服务器

func (*Router) RunWithConfig added in v0.1.1

func (r *Router) RunWithConfig(config ServerConfig) error

RunWithConfig 使用配置运行服务器

func (*Router) TRACE added in v0.1.1

func (r *Router) TRACE(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*Router) Use added in v0.1.1

func (r *Router) Use(middleware ...HandlerFunc)

Use 中间件

func (*Router) UseGin added in v0.1.1

func (r *Router) UseGin(middleware ...gin.HandlerFunc)

UseGin 中间件 直接使用 gin.HandlerFunc

type RouterGroup added in v0.1.1

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

RouterGroup 路由组

func (*RouterGroup) ANY added in v0.1.1

func (rg *RouterGroup) ANY(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*RouterGroup) CONNECT added in v0.1.1

func (rg *RouterGroup) CONNECT(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*RouterGroup) DELETE added in v0.1.1

func (rg *RouterGroup) DELETE(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*RouterGroup) GET added in v0.1.1

func (rg *RouterGroup) GET(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*RouterGroup) Group added in v0.1.1

func (rg *RouterGroup) Group(path string, middleware ...HandlerFunc) *RouterGroup

Group 创建子路由组

func (*RouterGroup) HEAD added in v0.1.1

func (rg *RouterGroup) HEAD(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*RouterGroup) OPTIONS added in v0.1.1

func (rg *RouterGroup) OPTIONS(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*RouterGroup) PATCH added in v0.1.1

func (rg *RouterGroup) PATCH(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*RouterGroup) POST added in v0.1.1

func (rg *RouterGroup) POST(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*RouterGroup) PUT added in v0.1.1

func (rg *RouterGroup) PUT(path string, handler HandlerFunc, middleware ...HandlerFunc)

func (*RouterGroup) Register added in v0.1.1

func (rg *RouterGroup) Register(method, path string, handler HandlerFunc, middleware ...HandlerFunc)

Register 注册路由到当前组

func (*RouterGroup) Resource added in v0.1.1

func (rg *RouterGroup) Resource(path string, handler ResourceHandler, middleware ...HandlerFunc)

Resource 注册路由组内的 RESTful 资源路由

func (*RouterGroup) TRACE added in v0.1.1

func (rg *RouterGroup) TRACE(path string, handler HandlerFunc, middleware ...HandlerFunc)

type SSEEvent added in v0.1.1

type SSEEvent struct {
	Event string `json:"event"` // 事件名称
	Data  any    `json:"data"`  // 事件数据
	ID    string `json:"id"`    // 事件ID
	Retry int    `json:"retry"` // 重试时间(毫秒)
}

SSEEvent SSE 事件结构体

type SSEHub added in v0.1.1

type SSEHub struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

SSEHub SSE 连接管理中心

func (*SSEHub) BroadCast added in v0.1.1

func (h *SSEHub) BroadCast(event *SSEEvent)

Broadcast 广播消息

func (*SSEHub) Close added in v0.1.1

func (h *SSEHub) Close()

Close 关闭 Hub

func (*SSEHub) GetClients added in v0.1.1

func (h *SSEHub) GetClients() []string

GetClients 获取所有在线客户端ID

func (*SSEHub) IsRunning added in v0.1.1

func (h *SSEHub) IsRunning() bool

IsRunning 检查 Hub 是否正在运行

func (*SSEHub) Restart added in v0.1.1

func (h *SSEHub) Restart()

Restart 重启 Hub

func (*SSEHub) Run added in v0.1.1

func (h *SSEHub) Run()

Run 运行 SSE Hub

func (*SSEHub) SendToClient added in v0.1.1

func (h *SSEHub) SendToClient(clientID string, event *SSEEvent) bool

SendToClient 发送消息到指定客户端

type ServerConfig added in v0.1.1

type ServerConfig struct {
	Host            string        // 主机地址
	Port            string        // 端口
	ReadTimeout     time.Duration // 读取超时
	WriteTimeout    time.Duration // 写入超时
	MaxHeaderBytes  int           // 最大头部字节
	CertFile        string        // TLS证书文件
	KeyFile         string        // TLS密钥文件
	EnableHTTP2     bool          // 启用HTTP/2
	GracefulTimeout time.Duration // 优雅关闭超时
}

ServerConfig 服务器配置选项

func DefaultServerConfig added in v0.1.1

func DefaultServerConfig() ServerConfig

DefaultServerConfig 返回默认服务器配置

type Stats added in v0.1.2

type Stats struct {
	ItemsCount    int           `json:"itemsCount"`    // 普通缓存项数量
	ListsCount    int           `json:"listsCount"`    // 列表数量
	HitCount      uint64        `json:"hitCount"`      // 命中次数
	MissCount     uint64        `json:"missCount"`     // 未命中次数
	LastSaveTime  time.Time     `json:"lastSaveTime"`  // 最后一次保存时间
	LastLoadTime  time.Time     `json:"lastLoadTime"`  // 最后一次加载时间
	CreationTime  time.Time     `json:"creationTime"`  // 创建时间
	MemoryUsage   uint64        `json:"memoryUsage"`   // 预估内存使用(字节)
	ExpiredCount  uint64        `json:"expiredCount"`  // 过期项目计数
	DeletedCount  uint64        `json:"deletedCount"`  // 删除项目计数
	PersistPath   string        `json:"persistPath"`   // 持久化路径
	IsAutoPersist bool          `json:"isAutoPersist"` // 是否开启自动持久化
	SaveInterval  time.Duration `json:"saveInterval"`  // 保存间隔
}

Stats 缓存统计信息

type Transaction added in v0.1.2

type Transaction[K comparable, V any] struct {
	// contains filtered or unexported fields
}

Transaction 表示一个缓存事务

func (*Transaction[K, V]) Commit added in v0.1.2

func (t *Transaction[K, V]) Commit()

Commit 提交事务

func (*Transaction[K, V]) Delete added in v0.1.2

func (t *Transaction[K, V]) Delete(key K)

Delete 在事务中删除缓存项

func (*Transaction[K, V]) DeleteList added in v0.1.2

func (t *Transaction[K, V]) DeleteList(key K)

DeleteList 在事务中删除列表

func (*Transaction[K, V]) LPush added in v0.1.2

func (t *Transaction[K, V]) LPush(key K, values ...V)

LPush 在事务中将值插入列表头部

func (*Transaction[K, V]) Rollback added in v0.1.2

func (t *Transaction[K, V]) Rollback()

Rollback 回滚事务(什么也不做,因为事务只在Commit时才会应用)

func (*Transaction[K, V]) Set added in v0.1.2

func (t *Transaction[K, V]) Set(key K, value V, duration time.Duration)

Set 在事务中设置缓存项

func (*Transaction[K, V]) SetListExpiration added in v0.1.2

func (t *Transaction[K, V]) SetListExpiration(key K, duration time.Duration)

SetListExpiration 在事务中设置列表过期时间

type UploadConfig

type UploadConfig struct {
	AllowedExts []string // 允许的文件扩展名
	MaxSize     int64    // 最大文件大小(字节)
	SavePath    string   // 保存路径
}

UploadConfig 文件上传相关方法

type Validator added in v0.1.1

type Validator interface {
	Validate() (bool, string)
}

Validator 验证器接口

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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