package main import ( "errors" "fmt" "os" ) var ErrFileNotFound = errors.New("file not found") func recoverHandler() { if r := recover(); r != nil { fmt.Println("Recovered from panic:", r) os.Exit(1) } } func main() { defer recoverHandler() // 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) } // pannic arrs := []int{1, 2, 3} fmt.Println(arrs[4]) // if r := recover(); r != nil { // fmt.Println("Recovered from panic:", r) // os.Exit(1) // } } // 最常见的就是 遍历目录里面的文件 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 }