diff --git a/day03/error/README.md b/day03/error/README.md index 7c0d0d4..01ad60a 100644 --- a/day03/error/README.md +++ b/day03/error/README.md @@ -156,4 +156,56 @@ func main() { 函数执行完成后,调用你的defer 函数进行 资源清理或者崩溃恢复 +一个 流程(协程)里面,可以有个defer语句,声明 函数执行完成后的Hook调用 + +```go +func main() { + defer panicHandler() + + // if r := recover(); r != nil { + // fmt.Println("Recovered from panic:", r) + // os.Exit(1) + // } + + // 变量目录, 打印了文件名称 + err := walkDir("./xxxx", func(filePath string) { + fmt.Println(filePath) + }) + + if err != nil { + if errors.Is(err, os.ErrNotExist) { + fmt.Println("not exist", err) + } else { + fmt.Printf("%s", err) + } + // os.Exit(1) + } + + // 初始化数据库,连接数据库 + defer func() { + fmt.Println("关闭数据库连接") + }() + + // pannic + // arrs := []int{1, 2, 3} + // fmt.Println(arrs[4]) + + // if r := recover(); r != nil { + // fmt.Println("Recovered from panic:", r) + // os.Exit(1) + // } + + // 启动API服务器 HTTP Server + defer func() { + fmt.Println("关闭HTTP服务器") + }() +} + +// not exist walkDir error +// open ./xxxx: no such file or directory +// 关闭HTTP服务器 +// 关闭数据库连接 +// panic handler +``` + diff --git a/day03/error/main.go b/day03/error/main.go index 4caa3f7..be199c7 100644 --- a/day03/error/main.go +++ b/day03/error/main.go @@ -8,7 +8,8 @@ import ( var ErrFileNotFound = errors.New("file not found") -func recoverHandler() { +func panicHandler() { + fmt.Println("panic handler") if r := recover(); r != nil { fmt.Println("Recovered from panic:", r) os.Exit(1) @@ -16,7 +17,7 @@ func recoverHandler() { } func main() { - defer recoverHandler() + defer panicHandler() // if r := recover(); r != nil { // fmt.Println("Recovered from panic:", r) @@ -37,14 +38,26 @@ func main() { // os.Exit(1) } + // 初始化数据库,连接数据库 + defer func() { + // db.Close() + fmt.Println("关闭数据库连接") + }() + // pannic - arrs := []int{1, 2, 3} - fmt.Println(arrs[4]) + // arrs := []int{1, 2, 3} + // fmt.Println(arrs[4]) // if r := recover(); r != nil { // fmt.Println("Recovered from panic:", r) // os.Exit(1) // } + + // 启动API服务器 HTTP Server + defer func() { + // httpServer.Shutdown() + fmt.Println("关闭HTTP服务器") + }() } // 最常见的就是 遍历目录里面的文件 diff --git a/day03/error/mpg.drawio b/day03/error/mpg.drawio index 7ef5927..48e66ee 100644 --- a/day03/error/mpg.drawio +++ b/day03/error/mpg.drawio @@ -1,86 +1,119 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +