从零搭建全球指数历史数据平台:Go + React + PostgreSQL + Docker 全栈实战

📅 2026/7/2 4:17:21
从零搭建全球指数历史数据平台:Go + React + PostgreSQL + Docker 全栈实战
本文配套完整源码已上传至 CSDN 资源搜索「全球指数历史数据平台 GoReact」即可下载解压后一条docker compose命令即可启动全栈环境。一、项目简介Global Index History Platform全球指数历史数据平台是一个企业级的全球股票指数历史数据采集与展示平台。后端使用 Go Gin GORM PostgreSQL前端使用 React TypeScript Vite Ant Design ECharts支持 Docker Compose 一键部署。平台内置六个指数并通过统一的数据源接口设计可在不修改业务代码的前提下扩展新指数与新数据源。市场指数代码数据源中国上证指数000001.SH东方财富中国深证成指399001.SZ东方财富中国科创50000688.SH东方财富美国纳斯达克综合指数IXICYahoo Finance美国标普500指数GSPCYahoo Finance日本日经225指数N225Yahoo Finance二、技术栈后端Go 1.24、Gin、GORM、PostgreSQL、robfig/cron、Resty、Zap、Viper前端React 18、TypeScript、Vite、Ant Design 5、Axios、ECharts 5部署Docker、Docker Compose、Nginx三、系统架构请求自上而下严格分层依赖只指向内层数据访问只发生在 RepositoryBrowser ──▶ React SPA (Nginx) Dashboard / History / Sync │ /api (Axios 统一封装) ▼ Gin Router (middleware: Recovery / AccessLog / CORS) │ API (Handler) —— 仅解析参数、返回统一响应 │ Service —— 业务逻辑SyncOne / SyncAll / Latest… │ Crawler.Registry ──▶ IndexCrawler 接口 ├── YahooCrawler └── EastmoneyCrawler │ Repository —— CRUD / 分页 / 事务 / Upsert ▼ PostgreSQL Scheduler (robfig/cron) ──▶ 复用同一个 SyncService核心解耦点Service 仅依赖crawler.IndexCrawler接口与crawler.Registry通过index_info.source字段决定使用哪个爬虫。新增数据源不需要改动任何业务代码。四、核心功能特性多数据源采集统一IndexCrawler接口已实现 Yahoo Finance 与东方财富两个数据源。历史数据存储按(code, trade_date)唯一约束去重重复同步幂等ON CONFLICTupsert。定时同步基于 robfig/cron 每日自动全量同步支持失败重试。手动同步支持同步单个指数或全部指数并记录同步日志。可视化前端指数概览 Dashboard、历史走势 ECharts 折线图缩放 / Tooltip、数据同步页。统一响应与异常处理所有接口返回{ code, message, data }中间件统一 panic 恢复。结构化日志Zap 记录请求耗时、错误、同步过程。多环境配置Viper 支持 dev / test / prod并允许环境变量覆盖。五、快速开始Docker 一键部署前置已安装 Docker 与 Docker Compose。在项目根目录执行dockercompose-fdocker/docker-compose.yml up-d--build启动后前端http://localhost后端 APIhttp://localhost:8080/apiPostgreSQLlocalhost:5432postgres / postgres库index_platform首次启动会自动初始化数据库、启动后端并 AutoMigrate 兜底、启动前端 Nginx 反向代理/api。进入页面后在「数据同步」点击「同步全部」即可拉取历史数据。停止与清理dockercompose-fdocker/docker-compose.yml down# 停止dockercompose-fdocker/docker-compose.yml down-v# 停止并删除数据卷六、接口文档所有接口统一返回{ code: 0, message: success, data: {} }code 0表示成功。方法路径说明GET/api/health健康检查GET/api/index/list返回所有指数GET/api/index/latest返回各指数最新行情含涨跌GET/api/index/history查询历史数据分页POST/api/index/sync同步单个或全部指数GET/api/index/sync/logs查询同步日志分页示例# 同步全部curl-XPOST http://localhost:8080/api/index/sync-HContent-Type: application/json-d{}# 查询历史curlhttp://localhost:8080/api/index/history?code000001.SHstart2024-01-01end2024-12-31page1size20七、如何扩展新数据源 / 新指数新增数据源例如新浪财经在internal/crawler/新建sina.go实现IndexCrawler接口Source()与Fetch()。在cmd/server/main.go的crawler.NewRegistry(...)中注册该爬虫新增一行。业务层Service / API无需任何改动。新增指数在sql/02_seed.sql增加一行指定其source。在对应爬虫的代码映射表中补充该指数的源端符号。八、总结本项目是一个可直接运行、结构清晰的 Go React 全栈工程范例涵盖了分层架构、接口抽象与注册表、幂等 upsert、定时任务、统一响应、结构化日志、Docker Compose 编排等企业级实践非常适合作为 Go 后端与全栈开发的学习模板。完整源码见 CSDN 资源下载欢迎交流与 Star。下载链接》〉》