1.3遍历文件夹有改变了

func main() {
    result := config["result"]
    for {
        filepath.Walk(result, walkPath)
        time.Sleep(1 * time.Second)
    }
}

func walkPath(fpath string, f os.FileInfo, err error) error {
    //if f.IsDir() {
    //  return nil
    //}
        //1.2版本,上面三行判断是文件夹就不进文件夹继续遍历了,刚发布的1.3这三行编译没问题,执行的时候提示无效的内存地址。 
       。。。。。。
}

共 6 个回复


dazheng

请问,在1.3上怎么写是对的?试了几次,都不对。

# 0

snake117

@dazheng go1.3不允许nil指针调用方法了。

你可以试试先判断f是不是nil再判断是不是目录。

# 1

nowayout

@snake117 @dazheng ,是的,我现在就是这么改的

func walkPath(fpath string, f os.FileInfo, err error) error {
    if f == nil {
        return nil
    }

    if f.IsDir() {
        return nil
    }

    。。。。。。

}
# 2

dazheng

func explorer2(path string, info os.FileInfo, err error) error { if info == nil { return nil }

if info.IsDir() {
    return nil
} else {
    fmt.Println(path)
    fmt.Println(1)
    list = append(list, path)
}
return nil

} 这样写,始终获取不了文件,为什么?目录下是有目录、文件都有的

# 3

nowayout

@dazheng

func main() {
    for {
        filepath.Walk(path, explorer2)
        time.Sleep(100 * time.Millisecond)
    }
}

func explorer2(path string, info os.FileInfo, err error) error { 
    if info == nil { 
        return nil 
    }
    if info.IsDir() {
        return nil
    }
    fmt.Println(path)
    return nil
}
# 4

dazheng

谢谢nowayout,解决了,犯了个很低级的错误。

# 5