package main import ( "fmt" "github.com/fatih/color" "github.com/gin-gonic/gin" "log" "os" "runtime" "syscall" "unsafe" "zhixiangtong/utils" ) var ( kernel32 = syscall.NewLazyDLL("kernel32.dll") setConsoleTitle = kernel32.NewProc("SetConsoleTitleW") setConsoleMode = kernel32.NewProc("SetConsoleMode") ) const ( ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004 ) // enableVirtualTerminalProcessing 启用 Windows 的虚拟终端处理 func enableVirtualTerminalProcessing(fd uintptr) { var mode uint32 handle := syscall.Handle(fd) syscall.GetConsoleMode(handle, &mode) mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING setConsoleMode.Call(uintptr(handle), uintptr(mode)) } // 设置终端标题 func setTerminalTitle(title string) { utf16Title, _ := syscall.UTF16PtrFromString(title) setConsoleTitle.Call(uintptr(unsafe.Pointer(utf16Title))) } func main() { // 设置终端标题 setTerminalTitle("智享通") if os.Getenv("TERM") == "" { // 在 Windows 平台上启用虚拟终端处理,以支持颜色输出 enableVirtualTerminalProcessing(os.Stdout.Fd()) } // 初始化配置 dataDir := "data" // 确保 data 目录存在 if _, err := os.Stat(dataDir); os.IsNotExist(err) { err := os.Mkdir(dataDir, os.ModePerm) if err != nil { log.Fatalf("无法创建 data 目录:%v", err) } } config, err := utils.InitConfig(dataDir) if err != nil { log.Fatalf("初始化配置失败:%v", err) } // 初始化数据库 db, err := utils.InitDatabase(dataDir) if err != nil { log.Fatalf("初始化数据库失败:%v", err) } // 如果是 Windows 平台,强制启用颜色支持 if runtime.GOOS == "windows" { color.NoColor = false } // 设置为生产模式 gin.SetMode(gin.ReleaseMode) // 配置路由 router := utils.SetupRouter(db, config) // 启动服务 addr := fmt.Sprintf("%s:%s", config.Host, config.Port) log.Printf("服务正在运行在 %s", addr) err = router.Run(addr) if err != nil { log.Fatalf("服务框架启动失败 %v", err) return } }