Is it possible to capture a Ctrl+C signal (SIGINT) and run a cleanup function, in a “defer” fashion?

You can use the os/signal package to handle incoming signals. Ctrl+C is SIGINT, so you can use this to trap os.Interrupt. c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func(){ for sig := range c { // sig is a ^C, handle it } }() The manner in which you cause your program to terminate … Read more