# 短链 **Repository Path**: zero_degree/short-link ## Basic Information - **Project Name**: 短链 - **Description**: 用Go语言实现的短链系统 - **Primary Language**: Go - **License**: Artistic-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-09-22 - **Last Updated**: 2025-12-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言, 短网址 ## README # 短链接服务 (Short Link Service) 这是一个基于 Go 语言构建的短链接服务项目,提供了完整的短链接生成、转换、统计和管理功能。项目采用模块化设计,结合 Gin 框架、GORM、Redis 和 PostgreSQL,具备良好的可扩展性和高性能。 --- ## 📌 主要功能 - **短链接生成与替换**:支持将长链接转换为短链接,并允许更新已存在的短链接。 - **访问统计**:记录和查询短链接的访问情况,包括访问时间、来源等信息。 - **缓存机制**:使用 Redis 缓存短链接映射,提高访问效率。 - **任务调度**:支持后台定时任务,如统计数据处理。 - **中间件支持**:包含请求拦截、日志记录、异常处理等中间件功能。 - **配置管理**:支持数据库、Redis 等配置的集中管理。 --- ## 🧱 技术架构 - **框架**:[Gin](https://github.com/gin-gonic/gin) - **数据库**:PostgreSQL(使用 [GORM](https://gorm.io/) ORM) - **缓存**:Redis - **日志**:[Zap](https://github.com/uber-go/zap) - **依赖注入**:手动依赖注入 - **任务调度**:基于 Redis 的定时任务管理器 - **唯一 ID 生成**:Snowflake 算法 --- ## 📁 模块结构 - **api**:HTTP 接口定义与控制器 - **application**:应用层服务 - **config**:配置文件 - **domain**:领域模型与服务 - **infra**:基础设施层(数据库、缓存、中间件等) - **utils**:通用工具类 - **main.go**:程序入口 --- ## 🛠️ 开发环境搭建 ### 1. 安装依赖 ```bash go mod tidy ``` ### 2. 配置数据库 请参考 `docs/sql/init-pg.sql` 初始化 PostgreSQL 数据库。 ### 3. 修改配置文件 编辑 `config/config.dev.yaml` 文件,配置数据库和 Redis 连接信息。 ### 4. 启动服务 ```bash go run main.go ``` --- ## 🚀 使用示例 ### 创建短链接 ```http POST /api/url Content-Type: application/json { "longUrl": "https://example.com/very-long-url", "desc": "示例链接", "source": "web", "creator": "admin" } ``` ### 替换短链接 ```http PUT /api/url/123 Content-Type: application/json { "longUrl": "https://example.com/new-long-url", "desc": "更新后的链接", "editor": "admin" } ``` ### 查询短链接列表 ```http GET /api/url?page=1&size=10 ``` ### 访问短链接 ```http GET /{compressCode} ``` --- ## 📊 统计功能 支持按时间范围、短链接码等条件查询访问统计信息。 ```http GET /api/statistics?compressCode=abc123&startDate=2023-01-01&endDate=2023-12-31 ``` --- ## 🧑‍💻 贡献指南 欢迎提交 PR 或 Issue。请确保代码风格一致,并添加必要的测试用例。 --- ## 📄 许可证 本项目采用 [MIT License](https://opensource.org/licenses/MIT),详情请查看 LICENSE 文件。