在Go语言中,有没有与包内的init()
相反的功能?
在Go语言中,有没有与包内的init()
相反的功能?
Golang: 是否可以以“defer”方式捕获Ctrl+C信号并运行清理函数?
还要注意,您可以为指针值注册终结器函数。当垃圾收集器发现具有关联终结器的不可达块时,它会清除关联并在单独的goroutine中运行f(x)
。
您可以使用runtime.SetFinalizer()
注册此类终结器,这可能已经足够了,但请注意:
不能保证终结器在程序退出之前运行,因此通常仅在长时间运行的程序期间释放与对象关联的非内存资源时才有用。
请参阅此示例:
type Person struct {
Name string
Age int
}
func main() {
go func() {
p := &Person{"Bob", 20}
runtime.SetFinalizer(p, func(p2 *Person) {
log.Println("Finalizing", p2)
})
runtime.GC()
}()
time.Sleep(time.Second * 1)
log.Println("Done")
}
2009/11/10 23:00:00 Finalizing &{Bob 20}
2009/11/10 23:00:01 Done