39 lines
1.2 KiB
Go
39 lines
1.2 KiB
Go
// 像素游戏厅后端入口:加载配置 → 连接数据库 → 启动 HTTP/WebSocket 服务
|
||
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"log"
|
||
|
||
"nl-game-api-gin/internal/config"
|
||
"nl-game-api-gin/internal/database"
|
||
"nl-game-api-gin/internal/router"
|
||
)
|
||
|
||
func main() {
|
||
// 加载 config.yaml(端口、数据库、JWT、AI Key)
|
||
if err := config.Load("config.yaml"); err != nil {
|
||
log.Fatalln("配置加载失败:", err)
|
||
}
|
||
// 初始化 MySQL 连接
|
||
if err := database.Init(); err != nil {
|
||
log.Fatalln("数据库初始化失败:", err)
|
||
}
|
||
// 仅开发模式(go run 启动)自动补建缺失的表;
|
||
// go build 打包后的二进制绝不迁移,生产库结构变更一律手动执行 sql/ 脚本
|
||
if database.IsDevRun() {
|
||
if err := database.AutoMigrateMissing(); err != nil {
|
||
log.Fatalln("dev 自动建表失败:", err)
|
||
}
|
||
} else {
|
||
log.Println("生产模式:跳过表结构迁移(结构变更请手动执行 sql/ 脚本)")
|
||
}
|
||
// 启动服务
|
||
engine := router.Setup()
|
||
addr := fmt.Sprintf(":%d", config.C.Server.Port)
|
||
log.Println("后端服务已启动,监听", addr)
|
||
if err := engine.Run(addr); err != nil {
|
||
log.Fatalln("服务启动失败:", err)
|
||
}
|
||
}
|