为什么不使用 golang 包的 fini() 函数?

有用于包初始化的内置 init() 函数。为什么不为破坏而终结?例如,我在我的包中初始化了一个 goroutine 池,我希望池中的所有 goroutine 在退出之前完成它们的任务,而不是在整个程序退出时被迫退出。

如果有fini功能。我可以使用 sync.Wait 来实现我的目标。

内置 init 的另一个优点是它可以而且只能被调用一次,如果我使用用户定义函数作为它们的替代品,这将是我自己关心的问题。


Qyouu
浏览 209回答 2
2回答

慕的地8271018

试试下面的代码:package mainimport (    "fmt"    "sync"    "time")func main() {    defer fini()    wg.Add(1)    go routine()    fmt.Println("... in progress ... ")}func fini() {    wg.Wait()    fmt.Println("Done")}func init() {    fmt.Println("Hi")}func routine() {    fmt.Println("Doing somthing ...")    time.Sleep(1000 * time.Millisecond)    wg.Done()}var wg sync.WaitGroup跑:$ go run .Hi... in progress ...Doing somthing ...Done

湖上湖

在函数 main 中做fini可以解决我的问题
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go