首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package main
|
||||
|
||||
//
|
||||
//import (
|
||||
// "errors"
|
||||
// "fmt"
|
||||
// "os"
|
||||
//)
|
||||
//
|
||||
//// 自定义错误类型:文件不存在错误
|
||||
//type FileNotExistError struct {
|
||||
// Filename string
|
||||
//}
|
||||
//
|
||||
//func (e *FileNotExistError) Error() string {
|
||||
// return fmt.Sprintf("file [%s] does not exist", e.Filename)
|
||||
//}
|
||||
//
|
||||
//// 多层函数调用:模拟文件操作 + 错误包装
|
||||
//func readFile(name string) error {
|
||||
// if err := openFile(name); err != nil {
|
||||
// // 上层包装:添加上下文
|
||||
// return fmt.Errorf("readFile failed: %w", err)
|
||||
// }
|
||||
// return nil
|
||||
//}
|
||||
//
|
||||
//func openFile(name string) error {
|
||||
// // 底层错误:系统原生错误
|
||||
// _, err := os.Open(name)
|
||||
// if err != nil {
|
||||
// // 底层包装:绑定文件名上下文
|
||||
// return fmt.Errorf("open file [%s] failed: %w", name, err)
|
||||
// }
|
||||
// return nil
|
||||
//}
|
||||
//
|
||||
//func main() {
|
||||
// fmt.Println("===== 错误包装与链追踪 =====")
|
||||
// err := readFile("not_exist.txt")
|
||||
//
|
||||
// // 输出完整错误链
|
||||
// fmt.Println("完整错误:", err)
|
||||
// // 单次解包
|
||||
// fmt.Println("解包一层:", errors.Unwrap(err))
|
||||
// // 递归检测系统错误
|
||||
// if errors.Is(err, os.ErrNotExist) {
|
||||
// fmt.Println("判定结果:文件不存在")
|
||||
// }
|
||||
//
|
||||
// fmt.Println("\n===== 使用 errors.As 提取特定错误类型 =====")
|
||||
//
|
||||
// // 演示 errors.As:提取路径错误类型
|
||||
// var pathErr *os.PathError
|
||||
// if errors.As(err, &pathErr) {
|
||||
// fmt.Printf("提取到 PathError: 操作=%s, 路径=%s\n", pathErr.Op, pathErr.Path)
|
||||
// }
|
||||
//
|
||||
// // 演示 errors.As:提取系统错误
|
||||
// var sysErr error
|
||||
// if errors.As(err, &sysErr) {
|
||||
// if errors.Is(sysErr, os.ErrNotExist) {
|
||||
// fmt.Println("通过 errors.As+Is 确认:底层是 ErrNotExist")
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 自定义错误类型示例
|
||||
// fmt.Println("\n===== 自定义错误类型示例 =====")
|
||||
// customErr := &FileNotExistError{Filename: "test.txt"}
|
||||
// wrappedCustom := fmt.Errorf("config load failed: %w", customErr)
|
||||
//
|
||||
// var fileErr *FileNotExistError
|
||||
// if errors.As(wrappedCustom, &fileErr) {
|
||||
// fmt.Printf("提取到自定义错误类型:文件名=%s\n", fileErr.Filename)
|
||||
// }
|
||||
//}
|
||||
Reference in New Issue
Block a user