⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Go 错误包装

fmt.Errorf + %w 包装错误、errors.Is/As 判断链 · 难度:高级 · +20XP

错误包装(Go 1.13+)

fmt.Errorf("%w", err) 可以包装底层错误,保留原始错误信息供上层判断。用 errors.Iserrors.As 检查错误类型。

包装错误

var ErrNotFound = errors.New("not found")

func getUser(id int) (*User, error) { u, err := db.FindUser(id) if err != nil { // 包装底层错误,添加上下文信息 return nil, fmt.Errorf("获取用户 %d 失败: %w", id, err) } return u, nil }

判断错误类型

u, err := getUser(42)
if err != nil {
    // 判断是否为特定错误
    if errors.Is(err, ErrNotFound) {
        fmt.Println("用户不存在")
    }
    // 提取特定错误类型
    var vErr *ValidationError
    if errors.As(err, &vErr) {
        fmt.Println("验证失败:", vErr.Field)
    }
}

最佳实践

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 142 篇
0 完成
🔥 0