This commit is contained in:
vipg
2025-11-15 17:50:35 +08:00
parent a5753f0c47
commit 396f03964a
6 changed files with 50 additions and 38 deletions

View File

@@ -1 +1,3 @@
docker run -itd --name go_futures_trade_record_dev -v $(pwd)/src:/app -p 20010:80 golang:1.25.0-alpine3.22 docker stop go_futures_trade_record_dev
docker rm go_futures_trade_record_dev
docker run -itd --name go_futures_trade_record_dev -v $(pwd)/src:/app -p 20110:80 golang:1.25.0-alpine3.22

View File

@@ -41,9 +41,9 @@ func Init() {
} }
// 设置连接池参数 // 设置连接池参数
DB.SetMaxOpenConns(100) // 最大打开连接数 DB.SetMaxOpenConns(100) // 最大打开连接数
DB.SetMaxIdleConns(20) // 最大空闲连接数 DB.SetMaxIdleConns(20) // 最大空闲连接数
DB.SetConnMaxLifetime(time.Hour) // 连接最大存活时间 DB.SetConnMaxLifetime(time.Hour) // 连接最大存活时间
// 验证数据库连接 // 验证数据库连接
if err := DB.Ping(); err != nil { if err := DB.Ping(); err != nil {

View File

@@ -14,17 +14,17 @@ import (
var shanghaiLoc *time.Location var shanghaiLoc *time.Location
func init() { func init() {
var err error var err error
shanghaiLoc, err = time.LoadLocation("Asia/Shanghai") shanghaiLoc, err = time.LoadLocation("Asia/Shanghai")
if err != nil { if err != nil {
// 尝试备选时区名称 // 尝试备选时区名称
shanghaiLoc, err = time.LoadLocation("PRC") shanghaiLoc, err = time.LoadLocation("PRC")
if err != nil { if err != nil {
// 若仍失败,手动设置东八区偏移 // 若仍失败,手动设置东八区偏移
shanghaiLoc = time.FixedZone("CST", 8*3600) shanghaiLoc = time.FixedZone("CST", 8*3600)
log.Printf("警告:加载时区失败,使用手动东八区偏移: %v", err) log.Printf("警告:加载时区失败,使用手动东八区偏移: %v", err)
} }
} }
} }
// Init 初始化日志(依赖配置文件已加载) // Init 初始化日志(依赖配置文件已加载)
@@ -43,10 +43,10 @@ func Init() {
// 日志轮转配置lumberjack // 日志轮转配置lumberjack
hook := lumberjack.Logger{ hook := lumberjack.Logger{
Filename: viper.GetString("logger.path") + "logs/app.log", // 日志文件路径 Filename: viper.GetString("logger.path") + "logs/app.log", // 日志文件路径
MaxSize: viper.GetInt("logger.max_size"), // 单个文件最大大小MB MaxSize: viper.GetInt("logger.max_size"), // 单个文件最大大小MB
MaxBackups: viper.GetInt("logger.max_backup"), // 最大备份数 MaxBackups: viper.GetInt("logger.max_backup"), // 最大备份数
MaxAge: viper.GetInt("logger.max_age"), // 最大保留天数 MaxAge: viper.GetInt("logger.max_age"), // 最大保留天数
Compress: true, // 是否压缩 Compress: true, // 是否压缩
} }
// 编码器配置 // 编码器配置

View File

@@ -18,8 +18,8 @@ type CreateExchangeRequest struct {
// CreateExchangeResponse 响应结构 // CreateExchangeResponse 响应结构
type CreateExchangeResponse struct { type CreateExchangeResponse struct {
Success bool `json:"success"` Success bool `json:"success"`
Message string `json:"message"` Message string `json:"message"`
Data CreateExchangeData `json:"data"` Data CreateExchangeData `json:"data"`
} }

View File

@@ -1,11 +1,14 @@
package main package main
import ( import (
"futures_trade_record/db" // 数据库相关操作包 "futures_trade_record/db" // 数据库相关操作包
"futures_trade_record/logger" // 日志工具包 "futures_trade_record/logger" // 日志工具包
"futures_trade_record/logic/variety" // 业务逻辑处理包 "futures_trade_record/logic4exchange"
"futures_trade_record/logic4variety"
// 业务逻辑处理包
"time" "time"
"github.com/gin-contrib/cors" "github.com/gin-contrib/cors"
"github.com/gin-gonic/gin" // Gin框架用于构建HTTP服务 "github.com/gin-gonic/gin" // Gin框架用于构建HTTP服务
_ "github.com/lib/pq" // PostgreSQL数据库驱动下划线表示仅初始化不直接使用 _ "github.com/lib/pq" // PostgreSQL数据库驱动下划线表示仅初始化不直接使用
@@ -36,27 +39,34 @@ func main() {
// 配置跨域中间件 // 配置跨域中间件
r.Use(cors.New(cors.Config{ r.Use(cors.New(cors.Config{
// 允许所有来源(生产环境建议指定具体域名) // 允许所有来源(生产环境建议指定具体域名)
AllowOrigins: []string{"*"}, AllowOrigins: []string{"*"},
// 允许的请求方法 // 允许的请求方法
AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"}, AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"},
// 允许的请求头 // 允许的请求头
AllowHeaders: []string{"Origin", "Content-Type", "Content-Length", "Accept-Encoding", "X-CSRF-Token", "Authorization", "X-LoginRequest-ID"}, AllowHeaders: []string{"Origin", "Content-Type", "Content-Length", "Accept-Encoding", "X-CSRF-Token", "Authorization", "X-LoginRequest-ID"},
// 允许前端读取的响应头 // 允许前端读取的响应头
ExposeHeaders: []string{"Content-Length"}, ExposeHeaders: []string{"Content-Length"},
// 是否允许携带cookie // 是否允许携带cookie
AllowCredentials: true, AllowCredentials: true,
// 预检请求的缓存时间 // 预检请求的缓存时间
MaxAge: 12 * time.Hour, MaxAge: 12 * time.Hour,
})) }))
zap.L().Info("✅ 配置跨域中间件完成") zap.L().Info("✅ 配置跨域中间件完成")
// 注册品种接口 // 注册品种接口
variety := r.Group("/api/variety") variety := r.Group("/api/variety")
{ {
variety.POST("/create", logic.CreateVarietyHandler) // 创建品种 variety.POST("/create", logic4variety.CreateVarietyHandler)
} }
zap.L().Info("✅ 品种接口注册完成") zap.L().Info("✅ 品种接口注册完成")
// 注册交易所接口
exchangeGroup := r.Group("/api/exchange")
{
exchangeGroup.POST("/create", logic4exchange.CreateExchangeHandler)
}
zap.L().Info("✅ 交易所接口注册完成")
// 记录服务启动日志监听80端口 // 记录服务启动日志监听80端口
zap.L().Info("✅ 服务启动在80端口") zap.L().Info("✅ 服务启动在80端口")
r.Run(":80") r.Run(":80")