feat: 重构项目以符合 Go 规范,添加 OpenAI 接口适配,优化长文本朗读功能(切割后合并)

This commit is contained in:
王锦强
2025-03-09 13:02:28 +08:00
parent 539f6d9ef5
commit 8f2fd68ebe
31 changed files with 2487 additions and 647 deletions

View File

@@ -0,0 +1,83 @@
package server
import (
"context"
"fmt"
"log"
"os"
"os/signal"
"syscall"
"time"
"tts/internal/config"
)
// App 表示整个TTS应用程序
type App struct {
server *Server
cfg *config.Config
}
// NewApp 创建一个新的应用程序实例
func NewApp(configPath string) (*App, error) {
// 加载配置
cfg, err := config.Load(configPath)
if err != nil {
return nil, fmt.Errorf("加载配置失败: %w", err)
}
// 初始化服务
ttsService, err := InitializeServices(cfg)
if err != nil {
return nil, fmt.Errorf("初始化服务失败: %w", err)
}
// 设置路由
handler, err := SetupRoutes(cfg, ttsService)
if err != nil {
return nil, fmt.Errorf("设置路由失败: %w", err)
}
// 创建HTTP服务器
server := New(cfg, handler)
return &App{
server: server,
cfg: cfg,
}, nil
}
// Start 启动应用程序
func (a *App) Start() error {
// 创建一个错误通道
errChan := make(chan error, 1)
// 创建一个退出信号通道
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
// 在一个goroutine中启动服务器
go func() {
log.Printf("启动TTS服务监听端口 %d...\n", a.cfg.Server.Port)
errChan <- a.server.Start()
}()
// 等待退出信号或错误
select {
case err := <-errChan:
return err
case <-quit:
log.Println("接收到退出信号,正在优雅关闭...")
// 创建一个超时上下文用于优雅关闭
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
// 尝试优雅关闭服务器
if err := a.server.Shutdown(ctx); err != nil {
return fmt.Errorf("服务器关闭出错: %w", err)
}
log.Println("服务器已优雅关闭")
return nil
}
}