基于 Gin + GORM + PostgreSQL + Redis 的友情链接管理系统,从 GoFrame 架构迁移而来。
- 现代化架构: Gin + GORM + PostgreSQL + Redis
- 清洁架构: Handler → Service → Logic → Model 分层设计
- 安全认证: 基于 xUtil.GenerateSecurityKey() 的会话管理
- Redis 缓存: 完善的缓存策略和会话存储
- API 文档: 自动生成的 Swagger 文档
- 友情链接管理: 完整的友链申请、审核、分组、颜色管理
- Web 框架: Gin
- ORM: GORM
- 数据库: PostgreSQL
- 缓存: Redis
- 认证: 自定义 Token + Redis 会话
- 文档: Swagger
- 配置:
.env环境变量
bamboo-main/
├── main.go # 应用入口
├── go.mod # 依赖管理
├── .env.example # 环境变量示例
├── internal/
│ ├── handler/ # HTTP 处理层
│ ├── service/ # 服务接口层
│ ├── logic/ # 业务逻辑层
│ ├── models/ # 配置模型与基础结构
│ ├── entity/ # 数据库实体
│ ├── repository/ # 数据访问层(含 cache)
│ ├── middleware/ # 中间件
│ └── app/ # 路由与启动编排
├── pkg/ # 常量与工具函数
├── scripts/
│ └── init_admin.sql # 初始化 SQL
└── docs/ # Swagger 文档
- Go 1.24+
- PostgreSQL 12+
- Redis 6+
创建 PostgreSQL 数据库:
CREATE DATABASE bamboo_main;
CREATE USER bamboo_main WITH PASSWORD 'bamboo_main';
GRANT ALL PRIVILEGES ON DATABASE bamboo_main TO bamboo_main;复制配置模板并按需填写:
cp .env.example .env常用配置项:
XLF_DEBUG/XLF_PORTDATABASE_HOST/DATABASE_PORT/DATABASE_USER/DATABASE_PASS/DATABASE_NAMENOSQL_HOST/NOSQL_PORT/NOSQL_DATABASE/NOSQL_PREFIXEMAIL_HOST/EMAIL_PORT/EMAIL_USER/EMAIL_PASS
go mod tidy运行应用后,GORM 会自动创建表结构:
go run main.go然后执行初始化 SQL 创建管理员账户:
psql -h localhost -U bamboo_main -d bamboo_main -f scripts/init_admin.sql- API 服务: http://localhost:23333
- API 文档: http://localhost:23333/swagger/index.html
- 健康检查: http://localhost:23333/api/v1/public/health
POST /api/v1/auth/login- 用户登录POST /api/v1/auth/logout- 用户登出GET /api/v1/auth/user- 获取用户信息POST /api/v1/auth/password/change- 修改密码POST /api/v1/auth/password/reset- 重置密码
POST /api/v1/admin/links- 添加友情链接GET /api/v1/admin/links- 获取友情链接列表GET /api/v1/admin/links/{uuid}- 获取友情链接详情PUT /api/v1/admin/links/{uuid}- 更新友情链接DELETE /api/v1/admin/links/{uuid}- 删除友情链接PUT /api/v1/admin/links/{uuid}/status- 更新链接状态PUT /api/v1/admin/links/{uuid}/fail- 更新失效状态
GET /api/v1/public/links- 获取公开友情链接GET /api/v1/public/health- 健康检查GET /api/v1/public/ping- Ping 测试
系统使用自定义 Token 认证:
- 登录成功后获得 token(格式:
cs_+ 64位字符串) - 请求头添加:
Authorization: Bearer {token} - Token 存储在 Redis 中,默认有效期 24 小时
- Redis Key 格式:
{NOSQL_PREFIX}:auth:token:{token}(默认bm:auth:token:{token})
项目使用统一的 Redis Key 命名规范:
type RedisKey string
const (
RedisAuthToken RedisKey = "auth:token:%s"
RedisMailQueue RedisKey = "mail:queue"
RedisLinkFriend RedisKey = "link:friend:%d"
RedisSponsorChan RedisKey = "sponsor:channel:%d"
)
key := RedisAuthToken.Get(token).String() // => bm:auth:token:{token}swag init -g main.gogo test ./...go fmt ./...- 用户名: admin
- 密码: admin123456
- 邮箱: admin@example.com
- 角色: admin
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
MIT License - 详见 LICENSE 文件
- 基于 demo 项目的架构设计
- 从 old 项目迁移业务逻辑
- 使用 bamboo-base-go 基础库