如何在程序退出时使用golang删除文件?

如何在程序退出时使用golang删除文件?,go,Go,我制作了一个命令行应用程序,在这里我压缩文件夹并在本地服务器上共享,以便其他人下载。我要做的是在关闭服务器后立即删除压缩文件夹的副本。这是我的代码: func main() { //flag to specify whether we will be uploading folder or a single file zipped := flag.Bool("z",false,"Use for zipping folders and serving them as a singl

我制作了一个命令行应用程序,在这里我压缩文件夹并在本地服务器上共享,以便其他人下载。我要做的是在关闭服务器后立即删除压缩文件夹的副本。这是我的代码:

func main() {
    //flag to specify whether we will be uploading folder or a single file
    zipped := flag.Bool("z",false,"Use for zipping folders and serving them as a single file on the server.(Deletes the zipped file once the server closes.)")
    save := flag.Bool("s",false,"Use with -z for saving the zipped files locally even after the server closes.")
    flag.Parse()


    if len(flag.Args())>0{

        if *zipped{
            fmt.Println("zipping...")
            flag.Args()[0]=ZipFile()

            if !(*save){
              //I expect this to remove the file when I hit ctrl+c on cmd  
              defer os.Remove(flag.Args()[0])   
                 }
        }
        http.HandleFunc("/",ShareFile)
        fmt.Printf("Sharing file on %s:8080\n",GetOutboundIP())

        log.Fatal(http.ListenAndServe(":8080",nil))
    }else{
        fmt.Println("Invalid usage. No file mentioned. Use wshare -h for help.")
    }

}
当我点击ctrl-c时,程序退出,主函数关闭,因此,os.Remove(xyz)不应该执行吗?表示,当函数返回时,defer执行表达式。在这里,我觉得梅因根本没有机会归还任何东西


要实现我的目标,什么是变通方法?我脑子里有一些解决方案,比如等待按键等。但我希望这个程序非常简单,那么有没有办法在服务器关闭/程序退出时删除文件,而不需要我进一步输入?

这已经在评论中得到了回答,但为了完整性,我将在这里记录它

defer
仅当您正在使用它的程序和代码正常运行时才起作用。另一方面,使用命令停止或终止程序会向程序发送信号,然后异常终止程序,这不允许程序干净地运行所有
defer
语句

如果要在操作系统终止时进行清理,可以侦听操作系统信号-代码基于:

sigs:=make(信道操作信号,1)
signal.Notify(sigs,syscall.SIGINT,syscall.SIGTERM)
go func(){

“<代码>主< /代码>函数被中断,因此您需要安装一个信号处理程序,并调用该函数内的“代码>删除/代码>。让我来看看信号处理程序是什么。谢谢您的响应。这里有一个简单的例子:酷,我想我应该已经提到过一个信道读取阻塞。”供将来参考的问题。只需提及-实际删除的文件将是os.Remove(路径)
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
  <- sigs
  cleanupAllTheThings()
  os.Exit(0)
}()