Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 闭包 trap
- var rmdirs []func()
- for _, d := range tempDirs() {
- dir := d // 不能删除,否则循环删除的是同一个目录
- os.MkdirAll(dir, 0755)
- rmdirs = append(rmdirs, func() {
- os.RemoveAll(dir)
- })
- }
- for _, rmdir := range rmdirs {
- rmdir()
- }
- // 因为 for 循环引入了新的词法块, d 在这个词法块中被声明,而闭包(函数值)中记录的是循环变量的内存地址,而不是某一时刻的值,所以引入一个新的变量,将 d 赋值给 dir
- // 这并不是循环的问题,而是闭包(函数值)等待循环结束之后才执行
- // 另外的解决方法,将 d 作为参数传递给闭包(函数值)
- for _, dir := range tempDirs() {
- os.MkdirAll(dir, 0755)
- rmdirs = append(rmdirs, func(dir string) {
- os.RemoveAll(dir)
- }(dir))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement