# Exchangeapp_backend **Repository Path**: go_27/exchangeapp_backend ## Basic Information - **Project Name**: Exchangeapp_backend - **Description**: No description available - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-24 - **Last Updated**: 2025-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Exchangeapp_backend 🚀 **高性能货币兑换系统后端服务** --- ## 项目简介 🌟 CurrencyExchangeApp 是一个功能完整的货币兑换应用后端服务,基于 Go 语言开发。该系统不仅提供了用户认证功能,还为货币兑换操作提供了基础架构支持,同时新增了文章管理和点赞系统功能。系统采用现代化的 Web 开发技术栈,保证了高性能、安全性和可扩展性。 --- ## 技术栈 🛠️ | 类别 | 技术/框架 | 用途 | 官方文档 | |-----|-----------|------|----------| | 🌐 编程语言 | Go | 主要开发语言 | [Go官方文档](https://golang.org/doc/) | | 🎯 Web 框架 | Gin | 构建高性能 RESTful API | [Gin文档](https://gin-gonic.com/zh-cn/docs/) | | ⚙️ 配置管理 | Viper | 灵活读取和管理配置文件 | [Viper文档](https://github.com/spf13/viper) | | 💾 数据库 | MySQL | 数据持久化存储 | [MySQL文档](https://dev.mysql.com/doc/) | | 🔄 ORM 框架 | GORM | 简化数据库操作 | [GORM文档](https://gorm.io/zh_CN/docs/) | | 🔀 读写分离 | GORM DBResolver | 数据库读写分离 | [DBResolver文档](https://gorm.io/zh_CN/docs/dbresolver.html) | | 🔐 认证方式 | JWT (JSON Web Token) | 无状态身份验证 | [JWT官网](https://jwt.io/) | | 🔒 密码加密 | Bcrypt | 安全存储用户密码 | [Bcrypt](https://pkg.go.dev/golang.org/x/crypto/bcrypt) | | ⚡ 缓存系统 | Redis | 数据缓存和热点数据管理 | [Redis文档](https://redis.io/documentation) | | 🌉 跨域处理 | Gin-CORS | 处理跨域资源共享 | [Gin-CORS](https://github.com/gin-contrib/cors) | --- ## 项目目录结构 📁 ``` exchangeapp_backend/ ├── .gitignore # Git 忽略文件 ├── README.en.md # 英文说明文档 ├── README.md # 中文说明文档 ├── config/ # 配置相关文件 │ ├── config.go # 配置加载和管理 │ ├── config.yml # 配置文件 │ ├── db.go # 数据库配置和连接 │ └── redis.go # Redis配置和连接 ├── controllers/ # 控制器层 │ ├── article_controller.go # 文章相关控制器 │ ├── auth_controller.go # 认证相关控制器 │ ├── exchange_rate_controller.go # 汇率相关控制器 │ └── like_controller.go # 点赞相关控制器 ├── global/ # 全局变量和常量 │ └── global.go # 全局配置和实例 ├── go.mod # Go 模块定义 ├── go.sum # 依赖校验和 ├── main.go # 程序入口 ├── md/ # 开发文档目录 │ ├── 01 - Viper 读取配置.md # 配置管理教程 │ ├── 02 - Gin 使用 配置.md # Web框架使用教程 │ ├── 03 - Gorm 初始化.md # 数据库初始化教程 │ ├── 04 - Gorm 模型自定义.md # 模型定义教程 │ ├── 05 - 密码 Bcrypt 加密.md # 密码加密教程 │ ├── 06 - JWT 配置 .md # JWT配置教程 │ ├── 07 - 登录 .md # 登录功能教程 │ ├── 08 - 汇率兑换 .md # 汇率功能教程 │ ├── 09 - JWT 验证 .md # JWT验证教程 │ ├── 10 - 文章.md # 文章功能教程 │ ├── 11 - redis 使用.md # Redis使用教程 │ ├── 12 - redis 缓存.md # Redis缓存教程 │ └── 13 - cors 使用.md # CORS配置教程 ├── middlewares/ # 中间件层 │ └── auth_middleware.go # JWT认证中间件 ├── models/ # 数据模型 │ ├── article.go # 文章模型定义 │ ├── base.go # 基础模型定义 │ ├── exchange_rate.go # 汇率模型定义 │ └── user.go # 用户模型定义 ├── router/ # 路由配置 │ └── router.go # API路由定义 └── utils/ # 工具函数 └── utils.go # 通用工具方法 ``` --- ## 模块说明 📦 ### 📝 配置管理模块 (config/) 配置管理模块,负责加载配置文件、初始化配置对象,以及数据库连接参数的设置。 ### 🎮 控制器层 (controllers/) 控制器层,处理 HTTP 请求,包含业务逻辑实现。auth_controller.go 负责用户认证相关功能。 ### 🌎 全局变量 (global/) 存储全局变量和单例实例,如数据库连接、配置对象等。 ### 📊 数据模型 (models/) 数据模型定义,使用 GORM 框架映射数据库表结构。包含通用的基础模型和业务模型。 ### 🔄 数据库读写分离 系统采用 GORM DBResolver 插件实现数据库读写分离,提升系统性能和扩展性: - **主库(写库)**:处理所有数据写入操作(INSERT、UPDATE、DELETE) - **从库(读库)**:处理所有数据读取操作(SELECT) - **负载均衡**:通过随机策略在多个从库间分发读请求 - **高可用**:支持主从切换,提高系统稳定性 ### 🛣️ 路由配置 (router/) 路由配置模块,定义 API 路由规则,将请求映射到对应的控制器处理函数。 ### 🧰 工具函数 (utils/) 工具函数库,提供通用的辅助功能,如密码加密、JWT 处理等。 ### 📚 开发文档 (md/) 开发文档目录,包含项目开发过程中的详细教程和说明文档: 1. **⚙️ 01 - Viper 读取配置.md**:详细介绍如何使用Viper库加载和管理配置文件 2. **🎯 02 - Gin 使用 配置.md**:Gin框架的基础用法和配置方法 3. **💾 03 - Gorm 初始化.md**:GORM数据库初始化的完整教程 4. **🔍 04 - Gorm 模型自定义.md**:如何自定义GORM数据模型 5. **🔒 05 - 密码 Bcrypt 加密.md**:用户密码的安全加密存储方案 6. **🔐 06 - JWT 配置 .md**:JWT认证的配置和实现方法 7. **👤 07 - 登录 .md**:用户登录功能的完整实现 8. **💱 08 - 汇率兑换 .md**:汇率管理功能的设计和实现 9. **🛡️ 09 - JWT 验证 .md**:JWT中间件验证的实现 10. **📝 10 - 文章.md**:文章管理功能的设计和实现 11. **⚡ 11 - redis 使用.md**:Redis缓存系统的集成方法 12. **🚀 12 - redis 缓存.md**:Redis缓存策略和优化技巧 13. **🌉 13 - cors 使用.md**:跨域资源共享(CORS)的配置和实现 --- ## 安装与部署 🚦 --- ### 前置条件 📋 - Go 1.16 或更高版本 - MySQL 数据库 - Redis 服务器(用于缓存和点赞功能) ### 安装步骤 🔧 1. **克隆项目** ```bash git clone cd exchangeapp_backend ``` 2. **安装依赖** ```bash go mod tidy ``` 3. **配置服务** 编辑 `config/config.yml` 文件,设置应用和数据库连接信息: ```yaml # 示例配置 app: name: ExchangeApp port: :3000 database: dsn: root:password@tcp(localhost:3306)/exchange?charset=utf8mb4&parseTime=True&loc=Local dsnSlave: root:password@tcp(localhost:3306)/exchange?charset=utf8mb4&parseTime=True&loc=Local MaxIdleConns: 10 MaxOpenConns: 100 ``` **注意:** Redis配置目前在 `config/redis.go` 文件中硬编码配置,请确保您的Redis服务器设置与以下配置匹配: - 地址:localhost:6379 - 数据库索引:0 - 密码:1234 4. **运行项目** ```bash go run main.go ``` 5. **✅ 验证服务** 服务启动后,可以通过以下方式验证是否正常运行: ```bash curl http://localhost:3000/ping # 预期返回: {"message":"pong"} ``` --- ## 项目更新说明 🆕 --- ### 新增功能 ✨ 1. **📝 文章管理系统** - 支持文章的创建、查询功能 - 实现了文章列表和单篇文章查询 - 使用Redis缓存优化文章列表查询性能 2. **👍 点赞系统** - 基于Redis实现的高性能点赞功能 - 支持对文章进行点赞和查询点赞数 - 实时更新点赞统计数据 3. **💱 汇率管理系统** - 支持汇率数据的创建和查询 - 提供灵活的汇率信息获取接口 4. **⚡ 缓存优化** - 集成Redis缓存系统 - 实现文章列表缓存,设置合理的过期时间 - 点赞功能完全基于Redis实现,提高性能 5. **🛡️ 安全性增强** - 完善的JWT认证中间件 - 受保护路由需要认证才能访问 - 公开路由和受保护路由清晰分离 6. **🌉 跨域支持** - 配置CORS中间件,支持跨域资源访问 - 可自定义允许的源、方法和请求头 --- ### API 接口文档 📄 --- ### 🔍 基础接口 - **健康检查** - 路径: `/ping` - 方法: GET - 返回: `{"message":"pong"}` ### 🔐 认证接口(无需认证) - **用户登录** - 路径: `/api/auth/login` - 方法: POST - 请求体: `{"username":"your_username","password":"your_password"}` - 成功返回: `{"token":"your_jwt_token","user":{"id":1,"username":"your_username"}}` - **用户注册** - 路径: `/api/auth/register` - 方法: POST - 请求体: `{"username":"new_username","password":"new_password"}` - 成功返回: `{"message":"registration successful","user_id":1}` ### 💱 汇率接口 - **获取汇率列表**(无需认证) - 路径: `/api/exchangeRates` - 方法: GET - 成功返回: 汇率数据列表 - **创建汇率**(需要认证) - 路径: `/api/exchangeRates` - 方法: POST - 请求头: `Authorization: Bearer {token}` - 请求体: `{"fromCurrency":"USD","toCurrency":"CNY","rate":6.95}` - 成功返回: 创建的汇率数据 ### 📝 文章接口(需要认证) - **创建文章** - 路径: `/api/articles` - 方法: POST - 请求头: `Authorization: Bearer {token}` - 请求体: `{"title":"文章标题","content":"文章内容","preview":"文章预览"}` - 成功返回: 创建的文章数据 - **获取文章列表** - 路径: `/api/articles` - 方法: GET - 请求头: `Authorization: Bearer {token}` - 成功返回: 文章列表(带缓存优化) - **获取单篇文章** - 路径: `/api/articles/:id` - 方法: GET - 请求头: `Authorization: Bearer {token}` - 成功返回: 单篇文章详情 ### 👍 点赞接口(需要认证) - **点赞文章** - 路径: `/api/articles/:id/like` - 方法: POST - 请求头: `Authorization: Bearer {token}` - 成功返回: `{"success":true,"likes":点赞数}` - **获取文章点赞数** - 路径: `/api/articles/:id/like` - 方法: GET - 请求头: `Authorization: Bearer {token}` - 成功返回: `{"likes":点赞数}` ## 安全特性 🔒 --- 1. **🔑 密码加密**:使用 Bcrypt 算法对用户密码进行加密存储,防止密码泄露。 2. **📝 JWT 认证**:采用无状态的 JWT 令牌进行身份验证,便于系统水平扩展。 3. **🛡️ 输入验证**:对用户输入进行严格验证,防止 SQL 注入等安全问题。 4. **🔐 HTTPS 支持**:可配置为支持 HTTPS 协议,提高传输安全性。 5. **🔄 数据库读写分离**:通过 DBResolver 插件实现读写分离,不仅提升性能,也增强了数据安全性。 6. **⚔️ 中间件认证**:使用JWT中间件对受保护路由进行认证,确保API安全。 7. **🌉 CORS配置**:安全的跨域资源共享配置,限制允许的源和方法。 --- ## 开发指南 💡 --- ### 🔐 密码加密测试 可以使用项目中的测试文件测试密码加密与验证功能: ```bash go run test/bcrypt.go ``` ### 📚 开发文档参考 项目的`md/`目录下包含了完整的开发教程文档,按顺序阅读这些文档可以系统地了解项目的开发过程和技术实现细节: 1. **完整开发流程**:文档按功能模块依次介绍了从配置加载、数据库连接到业务功能实现的完整过程 2. **详细代码示例**:每个文档都包含了具体的代码实现和使用方法 3. **最佳实践指导**:提供了Go语言Web开发中的最佳实践建议 ### 🧩 扩展系统 1. **📊 添加新模型**:在 `models/` 目录下创建新的模型文件 2. **🎮 添加新控制器**:在 `controllers/` 目录下创建新的控制器 3. **🛣️ 添加新路由**:在 `router/router.go` 中注册新的路由规则 4. **🧰 添加新工具函数**:在 `utils/utils.go` 中添加通用工具方法 5. **📝 添加新开发文档**:在 `md/` 目录下为新功能添加对应的开发文档 --- ## 贡献指南 🤝 --- 1. 🍴 Fork 本仓库 2. 🌿 新建功能分支 (`git checkout -b feature/amazing-feature`) 3. 💻 提交更改 (`git commit -m 'Add some amazing feature'`) 4. 🚀 推送到分支 (`git push origin feature/amazing-feature`) 5. 🔄 开启 Pull Request ## 许可证 📄 该项目使用 MIT 许可证。详情请参阅 LICENSE 文件。