跳转至

error、defer 与资源清理

Go 将错误作为普通返回值处理。调用返回 (value, error) 的函数后,应立即判断 err,不要继续使用可能无效的结果。

file, err := os.Open("notes.txt")
if err != nil {
    return err
}
defer file.Close()

defer 将函数调用推迟到当前函数返回前执行,多个 defer 按后进先出顺序执行。它适合在资源成功打开后立即登记关闭操作。

若需要保留关闭错误(例如写入文件时),不能简单忽略 Close 的返回值;应根据业务要求在显式关闭或命名返回值中处理。

包装错误

使用 %w 包装底层错误,使调用方可用 errors.Iserrors.As 检查原因:

return fmt.Errorf("读取配置失败: %w", err)

错误信息应提供上下文,但不要包含密码、令牌等敏感数据。

参考

评论