framework

module
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Feb 27, 2026 License: MIT

README

Leeforge Framework

Leeforge Framework 是 Leeforge 后端服务的通用技术内核,提供认证授权、HTTP 工具、日志、缓存、插件系统等基础设施能力。

模块路径

module github.com/leeforge/framework

安装

# 使用发布版本(推荐)
go get github.com/leeforge/[email protected]

Monorepo 本地联调,在 server/backend/go.mod 中添加:

require github.com/leeforge/framework v0.0.0

replace github.com/leeforge/framework => ../framework

模块速览

模块 路径 说明
插件系统 plugin 插件接口、AppContext、服务注册、事件总线
运行时 runtime 插件生命周期管理、拓扑排序、优雅关闭
认证授权 auth JWT 中间件 + Casbin RBAC/ABAC
HTTP 工具 http 标准响应 responder、请求绑定 binding
日志 logging 基于 zap 的结构化日志,支持日志轮转
配置 config Viper 多环境配置、热重载、环境变量注入
缓存 cache 多级缓存(内存 + Redis)、多种缓存策略
Ent 实体 entities Ent Schema Mixin:审计字段、UUID v7、多租户
Ent 生成 ent Ent ORM 生成代码(CasbinPolicy、Media 等)
权限元数据 permission 路由注册时附加权限码,供同步工具使用
路由组件 middleware 网关限流、CORS、安全头、IP 黑白名单
指标 metrics Counter/Gauge/Histogram 指标收集,Prometheus 导出
链路追踪 tracing 分布式追踪 Span、采样策略、HTTP 中间件
并发工具 concurrency Worker Pool、信号量、速率限制器
安全工具 security AES 加密、HMAC 签名、API Key 生成、密码验证
验证码 captcha 数学/图片/滑块验证码生成与校验
媒体处理 media 文件存储(本地/OSS)、图片处理、异步队列
字段组件 component CMS 字段类型组件注册与管理
Redis 客户端 redis_client Redis 连接配置与初始化
HTTP 请求 request HTTP 客户端、请求 ID 生成器
错误类型 errors 结构化错误类型,含错误码与 HTTP 状态码映射
JSON 工具 json 高性能 JSON 序列化/反序列化封装
环境模式 env_mode 运行环境感知(dev / production / test)
工具函数 utils 字符串转换、文件系统工具、路由打印
测试工具 testing HTTP 集成测试上下文、性能基准套件

快速开始

1. 初始化日志
import "github.com/leeforge/framework/logging"

logger := logging.NewLogger(logging.DefaultConfig())
2. 加载配置
import "github.com/leeforge/framework/config"

cfg, err := config.NewConfig()
var appCfg AppConfig
cfg.BindWithDefaults(&appCfg)
3. 初始化鉴权(Casbin)
import frameAuth "github.com/leeforge/framework/auth"

core, err := frameAuth.Setup(ctx, frameAuth.Config{
    DatabaseURL: appCfg.Database.DSN,
    AutoMigrate: true,
    EnableCache: true,
})
4. 实现并注册插件
import "github.com/leeforge/framework/plugin"

type UserPlugin struct{}

func (p *UserPlugin) Name() string { return "users" }
func (p *UserPlugin) Dependencies() []string { return []string{"auth"} }

func (p *UserPlugin) Setup(ctx context.Context, app plugin.AppContext) error {
    app.Router().Route("/users", func(r chi.Router) {
        permission.Get(r, "/", listHandler, permission.Private("列表", "users:read"))
    })
    return nil
}
5. 启动运行时
import "github.com/leeforge/framework/runtime"

rt := runtime.New(appCtx)
rt.Register(&AuthPlugin{})
rt.Register(&UserPlugin{})

rt.Bootstrap(ctx)
rt.Wait()
rt.Shutdown(ctx)

响应格式契约

所有 API 响应统一使用以下结构(通过 http/responder 输出):

{
  "data": {},
  "error": null,
  "meta": { "traceId": "req-abc", "took": 12 }
}

架构规则

  • 权限决策必须通过 Casbin/RBAC 管理器,禁止在 handler 中硬编码权限逻辑
  • API 响应统一使用 http/responder,禁止直接 json.Marshal
  • 业务编排留在上层插件,不进入 framework 核心层
  • UUID 主键统一使用 entities.NewUUID()(UUID v7),禁止使用其他 UUID 库
  • 错误处理使用 fmt.Errorf("context: %w", err) 包装,保留错误链

Jump to

Keyboard shortcuts

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