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 }