面试题答案
一键面试接口设计
定义一个通用的错误处理接口,用于标准化错误处理和错误链构建。
// ErrorHandler 定义错误处理接口
type ErrorHandler interface {
// HandleError 处理错误,并返回包含特定业务信息的错误链
HandleError(baseErr error, businessMsg string) error
}
错误链构建逻辑
通过实现上述接口来构建错误链。在 HandleError
方法中,将基础错误和业务特定信息组合成新的错误,并返回。
// DefaultErrorHandler 实现 ErrorHandler 接口
type DefaultErrorHandler struct{}
// HandleError 处理错误并构建错误链
func (d *DefaultErrorHandler) HandleError(baseErr error, businessMsg string) error {
if baseErr == nil {
return nil
}
return fmt.Errorf("%s: %w", businessMsg, baseErr)
}
在不同包中导入和使用该模块
- 假设模块名为
errorhandling
,在不同包中导入该模块。 - 创建
ErrorHandler
接口的实例,并使用其HandleError
方法处理错误。
完整代码示例
以下是一个完整的示例,展示了如何创建、导入和使用这个错误处理模块。
错误处理模块代码 (errorhandling/errorhandling.go)
package errorhandling
import (
"fmt"
)
// ErrorHandler 定义错误处理接口
type ErrorHandler interface {
HandleError(baseErr error, businessMsg string) error
}
// DefaultErrorHandler 实现 ErrorHandler 接口
type DefaultErrorHandler struct{}
// HandleError 处理错误并构建错误链
func (d *DefaultErrorHandler) HandleError(baseErr error, businessMsg string) error {
if baseErr == nil {
return nil
}
return fmt.Errorf("%s: %w", businessMsg, baseErr)
}
主程序代码 (main.go)
package main
import (
"fmt"
"yourpath/errorhandling"
)
func main() {
var handler errorhandling.ErrorHandler = &errorhandling.DefaultErrorHandler{}
baseErr := fmt.Errorf("基础错误")
businessMsg := "业务特定错误信息"
newErr := handler.HandleError(baseErr, businessMsg)
fmt.Println(newErr)
}
在上述代码中,errorhandling
包定义了 ErrorHandler
接口和 DefaultErrorHandler
结构体来实现错误处理和错误链构建。在 main
函数中,导入 errorhandling
包,创建 DefaultErrorHandler
实例,并使用 HandleError
方法处理错误并构建错误链。根据实际需求,不同包可以创建自己的 ErrorHandler
实现,以满足特定业务的错误处理需求。