go20/day03/error/main.go

83 lines
1.5 KiB
Go
Raw Permalink Normal View History

package main
import (
"errors"
"fmt"
"os"
)
var ErrFileNotFound = errors.New("file not found")
func panicHandler() {
fmt.Println("panic handler")
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
os.Exit(1)
}
}
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() {
// db.Close()
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() {
// httpServer.Shutdown()
fmt.Println("关闭HTTP服务器")
}()
}
// 最常见的就是 遍历目录里面的文件
func walkDir(path string, fn func(string)) error {
files, err := os.ReadDir(path)
if err != nil {
return errors.Join(errors.New("walkDir error"), err)
}
// 读取path目录下的文件和子目录
for _, file := range files {
// 如果是目录, 继续往下找
if file.IsDir() {
walkDir(path+"/"+file.Name(), fn)
} else {
// 文件, 调用fn函数处理
fn(path + "/" + file.Name())
}
}
return nil
}