trap os.exit in golang

I can run some cleanup on interruption (when I press ctrlc).

$ go build 
$ ./exit
^Creceived interrupt signal

Is it possible to trap the same way os.Exit call and run some code before program exits? The code:

package main

import (
    "fmt"
    "os"
    "os/signal"
    "syscall"
    "time"
)

func main() {
    handleInterrupt(2)
    time.Sleep(2 * time.Second)
    os.Exit(1) // how to trap it?
}
func handleInterrupt(intrptChSize int) {
    s := make(chan os.Signal, intrptChSize)
    signal.Notify(s,
        syscall.SIGABRT,
        syscall.SIGALRM,
        syscall.SIGBUS,
        syscall.SIGCHLD,
        syscall.SIGCONT,
        syscall.SIGEMT,
        syscall.SIGFPE,
        syscall.SIGHUP,
        syscall.SIGILL,
        syscall.SIGINFO,
        syscall.SIGINT,
        syscall.SIGIO,
        syscall.SIGIOT,
        syscall.SIGKILL,
        syscall.SIGPIPE,
        syscall.SIGPROF,
        syscall.SIGQUIT,
        syscall.SIGSEGV,
        syscall.SIGSTOP,
        syscall.SIGSYS,
        syscall.SIGTERM,
        syscall.SIGTRAP,
        syscall.SIGTSTP,
        syscall.SIGTTIN,
        syscall.SIGTTOU,
        syscall.SIGURG,
        syscall.SIGUSR1,
        syscall.SIGUSR2,
        syscall.SIGVTALRM,
        syscall.SIGWINCH,
        syscall.SIGXCPU,
        syscall.SIGXFSZ)
    go func() {
        for sig := range s {
            fmt.Printf("received %s signal
", sig)
            //cleanup()
        }
    }()
}

I know I can just run cleanup before each os.Exit() code manually in this example:

cleanup()
os.Exit(1)

But in my real project I am importing code which I cannot edit. This code contains os.Exit calls and I would like to do some cleanup before the program exits without editing imported code.

You can't. from TFM:

The program terminates immediately; deferred functions are not run.