Go 错误处理
error 接口、errors.New、自定义错误、panic/recover · 难度:进阶 · +20XP
Go 错误处理哲学
Go 没有 try-catch。函数返回 error 作为最后一个返回值,调用者显式检查。这不是 bug,是设计选择——显式错误处理让代码更可靠。
创建错误
// 简单错误
err := errors.New("something went wrong")
// 格式化错误
err := fmt.Errorf("处理 %s 时出错: %v", name, reason)
常见模式
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("除数不能为0")
}
return a / b, nil
}
result, err := divide(10, 0)
if err != nil {
fmt.Println("错误:", err)
return
}
fmt.Println("结果:", result)
自定义错误类型
type ValidationError struct {
Field string
Message string
}
func (e *ValidationError) Error() string {
return fmt.Sprintf("%s: %s", e.Field, e.Message)
}