refactor(tts): 删除 errorsx 包,使用标准库错误处理
## 变更内容 ### 1. 删除 errorsx 包 - 删除 pkg/errorsx/handler.go(未使用) - 删除 pkg/errorsx/error.go(无意义的常量) ### 2. 使用标准库错误处理 - 移除 "game-driver/pkg/errorsx" 导入 - 用 fmt.Errorf 替换所有 errorsx.XxxErr - 错误信息更清晰,保留完整上下文 ### 3. 改进前后对比 ```go // 之前 return errorsx.ThirdPartyErr // ❌ 上下文丢失 // 现在 return fmt.Errorf("获取Token失败: %s", resultMessage.ErrMsg) // ✅ 完整上下文 ``` ## 优势 ✅ 错误信息包含完整上下文 ✅ 减少一个自定义包 ✅ 使用标准库,更优雅 ✅ 代码行数减少:166 → 161 行 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +0,0 @@
|
||||
package errorsx
|
||||
|
||||
import "errors"
|
||||
|
||||
var DriverTimeoutErr = errors.New("处理超时")
|
||||
|
||||
var DriverCancelErr = errors.New("系统取消")
|
||||
|
||||
var ThirdPartyErr = errors.New("第三方请求异常")
|
||||
@@ -1,57 +0,0 @@
|
||||
package errorsx
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"go.uber.org/zap"
|
||||
"runtime/debug"
|
||||
)
|
||||
|
||||
// ErrorHandler 错误处理接口
|
||||
type ErrorHandler interface {
|
||||
HandleError(error, string)
|
||||
}
|
||||
|
||||
// DefaultHandler 默认错误处理器
|
||||
type DefaultHandler struct{}
|
||||
|
||||
// HandleError 处理错误并记录日志
|
||||
func (h *DefaultHandler) HandleError(err error, context string) {
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 记录错误信息和调用栈
|
||||
zap.S().Errorw(
|
||||
fmt.Sprintf("%s: %v", context, err),
|
||||
"stack", string(debug.Stack()),
|
||||
)
|
||||
}
|
||||
|
||||
// Wrap 错误包装,保留调用链
|
||||
func Wrap(err error, message string) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
return fmt.Errorf("%s: %w", message, err)
|
||||
}
|
||||
|
||||
// Must panic 如果 err 不为 nil
|
||||
func Must(err error, message string) {
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("%s: %v", message, err))
|
||||
}
|
||||
}
|
||||
|
||||
// LogError 记录错误但不中断
|
||||
func LogError(err error, context string) {
|
||||
if err != nil {
|
||||
zap.S().Errorw(fmt.Sprintf("%s: %v", context, err))
|
||||
}
|
||||
}
|
||||
|
||||
// LogWarn 记录警告
|
||||
func LogWarn(err error, context string) {
|
||||
if err != nil {
|
||||
zap.S().Warnw(fmt.Sprintf("%s: %v", context, err))
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"game-driver/config"
|
||||
"game-driver/leaf"
|
||||
"game-driver/pkg/audio"
|
||||
"game-driver/pkg/errorsx"
|
||||
"go.uber.org/zap"
|
||||
"io"
|
||||
"log"
|
||||
@@ -92,8 +91,7 @@ func (tts *AliTTS) getToken() error {
|
||||
}
|
||||
|
||||
if resultMessage.ErrMsg != "" {
|
||||
zap.S().Errorf("[TTS] 获取Token失败: %s", resultMessage.ErrMsg)
|
||||
return errorsx.ThirdPartyErr
|
||||
return fmt.Errorf("获取Token失败: %s", resultMessage.ErrMsg)
|
||||
}
|
||||
|
||||
tts.tokenResult = resultMessage.TokenResult
|
||||
@@ -135,26 +133,23 @@ func (tts *AliTTS) Get(ctx context.Context, text string) (io.Reader, error) {
|
||||
return ttsData.Data, err
|
||||
}
|
||||
|
||||
// 等待合成完成(带超时)
|
||||
// 等待合成完成
|
||||
select {
|
||||
case done := <-ch:
|
||||
if !done {
|
||||
zap.S().Error("[TTS] 合成失败: done=false")
|
||||
return ttsData.Data, errorsx.ThirdPartyErr
|
||||
return ttsData.Data, fmt.Errorf("TTS合成失败")
|
||||
}
|
||||
size := ttsData.Data.(*bytes.Buffer).Len()
|
||||
if size == 0 {
|
||||
zap.S().Error("[TTS] 合成数据为空")
|
||||
return ttsData.Data, errorsx.ThirdPartyErr
|
||||
return ttsData.Data, fmt.Errorf("TTS合成数据为空")
|
||||
}
|
||||
return ttsData.Data, nil
|
||||
|
||||
case <-time.After(time.Duration(tts.Timeout) * time.Second):
|
||||
zap.S().Errorf("[TTS] 合成超时: %s", text)
|
||||
return ttsData.Data, errorsx.DriverTimeoutErr
|
||||
return ttsData.Data, fmt.Errorf("TTS合成超时")
|
||||
|
||||
case <-ctx.Done():
|
||||
return ttsData.Data, errorsx.DriverCancelErr
|
||||
return ttsData.Data, fmt.Errorf("请求被取消")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user