add
This commit is contained in:
@@ -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
|
||||
@@ -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("✅ 数据库连接验证成功")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user