首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
package main
|
||||
|
||||
//
|
||||
//import (
|
||||
// "errors"
|
||||
// "fmt"
|
||||
// "os"
|
||||
//)
|
||||
//
|
||||
//// 自定义全局错误
|
||||
//type BizError struct {
|
||||
// Code int
|
||||
// Msg string
|
||||
// Module string
|
||||
// Err error // 添加底层错误
|
||||
//}
|
||||
//
|
||||
//func (e *BizError) Error() string {
|
||||
// return fmt.Sprintf("[%s] %d: %s", e.Module, e.Code, e.Msg)
|
||||
//}
|
||||
//
|
||||
//// Unwrap 返回底层错误,支持 errors.Is 和 errors.As 递归解包
|
||||
//func (e *BizError) Unwrap() error {
|
||||
// return e.Err
|
||||
//}
|
||||
//
|
||||
//// 哨兵错误
|
||||
//var ErrFileNotFound = errors.New("file not found")
|
||||
//
|
||||
//// 底层方法:包装系统错误
|
||||
//func open(name string) error {
|
||||
// _, err := os.Open(name)
|
||||
// if err != nil {
|
||||
// return fmt.Errorf("open exec: %w", ErrFileNotFound)
|
||||
// }
|
||||
// return nil
|
||||
//}
|
||||
//
|
||||
//// 业务方法:包装底层错误 + 自定义错误
|
||||
//func handleFile(name string) error {
|
||||
// if err := open(name); err != nil {
|
||||
// // 触发自定义业务错误
|
||||
// return &BizError{
|
||||
// Code: 50001,
|
||||
// Msg: "文件处理异常",
|
||||
// Module: "file",
|
||||
// Err: err, // 包装底层错误
|
||||
// }
|
||||
// }
|
||||
// return nil
|
||||
//}
|
||||
//
|
||||
//// 统一错误解析
|
||||
//func resolveError(err error) {
|
||||
// if err == nil {
|
||||
// return
|
||||
// }
|
||||
// fmt.Printf("完整错误:%v\n", err)
|
||||
//
|
||||
// // 1. 断言自定义错误
|
||||
// var biz *BizError
|
||||
// if errors.As(err, &biz) {
|
||||
// fmt.Printf("自定义错误:%v\n", biz)
|
||||
// // 2. 如果有底层错误,递归检查哨兵错误
|
||||
// if biz.Unwrap() != nil {
|
||||
// fmt.Printf("底层错误:%v\n", biz.Unwrap())
|
||||
//
|
||||
// // 3. 检查哨兵错误
|
||||
// if errors.Is(biz.Unwrap(), ErrFileNotFound) {
|
||||
// fmt.Println("✓ 哨兵错误:文件不存在")
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// // 4. 直接检查哨兵错误(兼容简单错误链)
|
||||
// if errors.Is(err, ErrFileNotFound) {
|
||||
// fmt.Println("✓ 哨兵错误:文件不存在")
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 5. 服务降级
|
||||
// fmt.Println("执行降级:返回默认文件内容")
|
||||
//}
|
||||
//
|
||||
//func main() {
|
||||
// fmt.Println("===== Go 错误处理综合实战 =====")
|
||||
// err := handleFile("demo.txt")
|
||||
// resolveError(err)
|
||||
// fmt.Println("\n===== 测试正常情况 =====")
|
||||
// // 创建一个存在的文件进行测试
|
||||
// tmpFile := "temp_test.txt"
|
||||
// os.WriteFile(tmpFile, []byte("test"), 0644)
|
||||
// err2 := handleFile(tmpFile)
|
||||
// if err2 == nil {
|
||||
// fmt.Println("文件处理成功")
|
||||
// }
|
||||
// os.Remove(tmpFile)
|
||||
//}
|
||||
Reference in New Issue
Block a user