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/config"
|
||||||
"game-driver/leaf"
|
"game-driver/leaf"
|
||||||
"game-driver/pkg/audio"
|
"game-driver/pkg/audio"
|
||||||
"game-driver/pkg/errorsx"
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
@@ -92,8 +91,7 @@ func (tts *AliTTS) getToken() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if resultMessage.ErrMsg != "" {
|
if resultMessage.ErrMsg != "" {
|
||||||
zap.S().Errorf("[TTS] 获取Token失败: %s", resultMessage.ErrMsg)
|
return fmt.Errorf("获取Token失败: %s", resultMessage.ErrMsg)
|
||||||
return errorsx.ThirdPartyErr
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tts.tokenResult = resultMessage.TokenResult
|
tts.tokenResult = resultMessage.TokenResult
|
||||||
@@ -135,26 +133,23 @@ func (tts *AliTTS) Get(ctx context.Context, text string) (io.Reader, error) {
|
|||||||
return ttsData.Data, err
|
return ttsData.Data, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 等待合成完成(带超时)
|
// 等待合成完成
|
||||||
select {
|
select {
|
||||||
case done := <-ch:
|
case done := <-ch:
|
||||||
if !done {
|
if !done {
|
||||||
zap.S().Error("[TTS] 合成失败: done=false")
|
return ttsData.Data, fmt.Errorf("TTS合成失败")
|
||||||
return ttsData.Data, errorsx.ThirdPartyErr
|
|
||||||
}
|
}
|
||||||
size := ttsData.Data.(*bytes.Buffer).Len()
|
size := ttsData.Data.(*bytes.Buffer).Len()
|
||||||
if size == 0 {
|
if size == 0 {
|
||||||
zap.S().Error("[TTS] 合成数据为空")
|
return ttsData.Data, fmt.Errorf("TTS合成数据为空")
|
||||||
return ttsData.Data, errorsx.ThirdPartyErr
|
|
||||||
}
|
}
|
||||||
return ttsData.Data, nil
|
return ttsData.Data, nil
|
||||||
|
|
||||||
case <-time.After(time.Duration(tts.Timeout) * time.Second):
|
case <-time.After(time.Duration(tts.Timeout) * time.Second):
|
||||||
zap.S().Errorf("[TTS] 合成超时: %s", text)
|
return ttsData.Data, fmt.Errorf("TTS合成超时")
|
||||||
return ttsData.Data, errorsx.DriverTimeoutErr
|
|
||||||
|
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return ttsData.Data, errorsx.DriverCancelErr
|
return ttsData.Data, fmt.Errorf("请求被取消")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user