有用于包初始化的内置 init() 函数。为什么不为破坏而终结?例如,我在我的包中初始化了一个 goroutine 池,我希望池中的所有 goroutine 在退出之前完成它们的任务,而不是在整个程序退出时被迫退出。如果有fini功能。我可以使用 sync.Wait 来实现我的目标。内置 init 的另一个优点是它可以而且只能被调用一次,如果我使用用户定义函数作为它们的替代品,这将是我自己关心的问题。
2 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
试试下面的代码:
package main
import (
"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
- 2 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消