1 回答
TA贡献1891条经验 获得超3个赞
问题是它os.Stat()
可能会返回一个error
你省略的。当这种情况发生时,fileStat
可能是,所以在下一行nil
调用会出现恐慌。fileStat.Mode()
而os.Stat()
失败的原因是因为file.Name()
是相对的root
,file.Name()
它本身存在的机会很小,它必须加入root
。如果os.Stat()
使用不存在的文件名调用,则返回nil
文件信息和非nil
错误。
您可以使用filepath.Join()
为可以使用的文件构建有效路径os.Stat()
。处理错误会更好,例如返回它们,您可以在main()
.
func appendFiles(root string) error {
fileInfo, err := ioutil.ReadDir(root)
if err != nil {
return fmt.Errorf("ReadDir error: %w", err)
}
for _, file := range fileInfo {
files = append(files, filepath.Join(root, file.Name()))
}
for _, file := range fileInfo {
fullName := filepath.Join(root, file.Name())
fileStat, err := os.Stat(fullName)
if err != nil {
return fmt.Errorf("Stat error: %w", err)
}
if fileStat.Mode().IsDir() {
if err := appendFiles(fullName); err != nil {
return fmt.Errorf("appendFiles error: %w", err)
}
}
}
return nil
}
func main() {
if err := appendFiles("."); err != nil {
fmt.Println(err)
}
}
- 1 回答
- 0 关注
- 107 浏览
添加回答
举报