为什么我的Go程序不能删除文件?

时间:2016-09-23 11:27:27

标签: go

我写了一个听取http请求的Go程序:

server := http.Server{
    Addr:        "0.0.0.0:65534",
    Handler:     &MyHandler{},
    ReadTimeout: 10 * time.Second,
}
server.ListenAndServe()

我设置浏览器请求" /退出"映射到函数:

func exit(w http.ResponseWriter, r *http.Request) {
    DeleteCache("../upload")
    defer os.Exit(0)
}

我想删除文件夹" ../ upload"中的文件,我的DeleteCache函数如下所示:

func deletefile(path string, f os.FileInfo, err error) error {
    if path == "../upload" {
        return nil
    }
    err1 := os.Remove(path)
    if err1 != nil {
        log.Fatal(err1)
        return err1
    }
    return err1
}

func DeleteCache(dirName string) {
    err := filepath.Walk(dirName, deletefile)
    checkNil(err)
}

接下来,我写了这样的测试代码:

func TestDeleteFile(t *testing.T) {
    //service is a package name.
    service.DeleteCache("../upload")
}

测试代码可以很好地运行,它删除了文件夹内的所有文件" ../ upload"

但是当我完全运行程序时,然后打开浏览器访问" 0.0.0.0:65534 /退出",程序告诉我

  

删除../upload:目录不为空

除了" /退出"它的处理函数名为"退出"

我猜原因是"去http列表服务"和" filepath.Walk",它们不能同时运行。也许我应该使用goroutines来运行它。

我非常感谢你的回复。

1 个答案:

答案 0 :(得分:4)

您可以使用os.RemoveAll("../upload")

func RemoveAll(path string) error 
// RemoveAll removes path and any children it contains.
// It removes everything it can but returns the first error
// it encounters. If the path does not exist, RemoveAll
// returns nil (no error).