我写了一个听取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来运行它。
我非常感谢你的回复。
答案 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).