1

Is there a way in to "defer" some function in a package so that it runs no matter what when the program that imported it terminates, it runs?

package something

import "fmt"

defer fmt.Println("package defer")
package main

import (
    "fmt"
    "something"
)

func main() {
    log.Println("main")
    defer fmt.Println("function defer")
    // Desired output
    // main
    // function defer
    // package defer
}
pythonian 23
  • 365
  • 4
  • 16
  • I don't think so. When main() returns, the program exits. – Paul Hankin Feb 26 '22 at 10:50
  • @PaulHankin could maybe something like launching a goroutine from the package's `init` function that is listening to some event, like sigkill or somesuch thingy, do the job? I don't know though if there's an event for `main`'s plain exit, probably not. – mkopriva Feb 26 '22 at 10:51
  • 1
    @mkopriva When main() returns, the program exits. It doesn't matter what goroutines you have started or what they are doing. You need to have an explicit call like `defer something.Cleanup()` from main to make sure it gets executed. – Paul Hankin Feb 26 '22 at 10:55

0 Answers0