一个使用 Go 构建的简化银行系统,提供账户管理、用户认证、转账、余额查询等功能。项目重点在于练习后端系统的开发流程,包括 API 设计、数据库操作、并发控制、安全认证和容器化部署。
- 语言:Go
- Web 框架:Gin
- 数据库:PostgreSQL(SQLC 生成类型安全查询)
- 缓存:Redis
- 认证:Passeto Token(替代 JWT)
- RPC:gRPC + Protocol Buffers(用于服务间通信)
- 容器化部署:Docker + Docker Compose
- 测试:Go test + Go Mock
- CI/CD:GitHub Actions
├── api/ # RESTful API 层 ├── gapi/ # gRPC 服务实现 ├── db/ # 数据库相关 │ ├── sqlc/ # sqlc 生成的查询代码 │ └── migrations/ # 数据库迁移脚本 ├── proto/ # Protocol Buffers 定义 │ └── service.proto # gRPC 接口定义 ├── worker/ # 异步任务处理 ├── token/ # 认证模块 │ └── jwt.go # JWT/Passeto 实现 ├── docker-compose.yaml # 容器编排(PostgreSQL/Redis等) ├── Dockerfile # 应用容器化构建 └── Makefile # 常用命令快捷入口
-
表结构包括:
-
用户表(user)
-
账户表(accounts)
-
账目流水表(entries)
-
转账记录表(transfers)
- 数据库建表语句
- API 文档 Swagger UI (运行服务后访问)
- 用户注册 / 登录(密码加密 + Passeto 鉴权)
- 获取用户账户信息
- 用户账户间转账(支持并发一致性)
- 查询账户余额、转账记录
- Redis 缓存优化性能
- gRPC 服务接口(与 HTTP API 并行开发)
- 使用 事务 + 行级锁 保证并发转账的一致性
- 使用 sqlc 替代 ORM,提升 SQL 性能和类型安全
- 使用 Passeto 替代 JWT,增强认证安全性
- 项目完全容器化,部署只需
docker-compose up
- 完善的目录结构,易于扩展为微服务架构
git clone https://github.com/Whuichenggong/simple-bank.git
cd simple-bank
```bash
docker-compose up --build
```bash
make migrateup
```bash
go test ./...