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

@@ -5,7 +5,7 @@ import (
"fmt"
"os"
"time"
_ "github.com/lib/pq"
"go.uber.org/zap"
)
@@ -39,11 +39,11 @@ func Init() {
if err != nil {
zap.L().Panic("❌ 无法连接数据库", zap.Error(err))
}
// 设置连接池参数
DB.SetMaxOpenConns(100) // 最大打开连接数
DB.SetMaxIdleConns(20) // 最大空闲连接数
DB.SetConnMaxLifetime(time.Hour) // 连接最大存活时间
DB.SetMaxOpenConns(100) // 最大打开连接数
DB.SetMaxIdleConns(20) // 最大空闲连接数
DB.SetConnMaxLifetime(time.Hour) // 连接最大存活时间
// 验证数据库连接
if err := DB.Ping(); err != nil {
@@ -51,4 +51,4 @@ func Init() {
}
zap.L().Info("✅ 数据库连接验证成功")
}
}

View File

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

View File

@@ -18,8 +18,8 @@ type CreateExchangeRequest struct {
// CreateExchangeResponse 响应结构
type CreateExchangeResponse struct {
Success bool `json:"success"`
Message string `json:"message"`
Success bool `json:"success"`
Message string `json:"message"`
Data CreateExchangeData `json:"data"`
}
@@ -174,4 +174,4 @@ func CreateExchangeHandler(c *gin.Context) {
ExchangeID: exchangeID,
},
})
}
}

View File

@@ -1,11 +1,14 @@
package main
import (
"futures_trade_record/db" // 数据库相关操作包
"futures_trade_record/logger" // 日志工具包
"futures_trade_record/logic/variety" // 业务逻辑处理包
"futures_trade_record/db" // 数据库相关操作包
"futures_trade_record/logger" // 日志工具包
"futures_trade_record/logic4exchange"
"futures_trade_record/logic4variety"
// 业务逻辑处理包
"time"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin" // Gin框架用于构建HTTP服务
_ "github.com/lib/pq" // PostgreSQL数据库驱动下划线表示仅初始化不直接使用
@@ -18,7 +21,7 @@ func main() {
logger.Init()
// 记录服务初始化日志
zap.L().Info("🟢 用户服务初始化")
// 记录数据库初始化开始日志
zap.L().Info("🟢 数据库初始化开始")
// 初始化数据库连接
@@ -36,28 +39,35 @@ func main() {
// 配置跨域中间件
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
AllowCredentials: true,
// 预检请求的缓存时间
MaxAge: 12 * time.Hour,
MaxAge: 12 * time.Hour,
}))
zap.L().Info("✅ 配置跨域中间件完成")
// 注册品种接口
variety := r.Group("/api/variety")
{
variety.POST("/create", logic.CreateVarietyHandler) // 创建品种
variety.POST("/create", logic4variety.CreateVarietyHandler)
}
zap.L().Info("✅ 品种接口注册完成")
// 注册交易所接口
exchangeGroup := r.Group("/api/exchange")
{
exchangeGroup.POST("/create", logic4exchange.CreateExchangeHandler)
}
zap.L().Info("✅ 交易所接口注册完成")
// 记录服务启动日志监听80端口
zap.L().Info("✅ 服务启动在80端口")
r.Run(":80")
}
}