title: How to delete a file using golang on program exit?
body: <p>I have made a command line application where I am zipping up folders and sharing on my local server for others to download. What I want to do is delete my copy of the zipped folder as soon as I close the server. This is my code:</p>
  
  <pre><code>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())&gt;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.")
      }
  
  }
  </code></pre>
  
  <p>When I hit ctrl-c, the program exits and main function closes and as a result,shouldn't os.Remove(xyz) get executed? <a href="https://tour.golang.org/flowcontrol/12" rel="noreferrer">A tour of go</a> says, defer executes the expression when the function returns. Here, I don't feel main gets the oppurtunity to return anything at all. </p>
  
  <p>What is a workaround to achieve what I am trying to do? I have some solutions in my head like wait for a keypress etc. but I want this program to be super simple,so is there a way to delete the file as soon as the server closes/program exits without requiring any further input from me?</p>