有内置的init()函数用于程序包初始化。为什么不破坏呢?例如,我在程序包中初始化了一个goroutine池,并且希望该池中的所有goroutine在退出之前完成其任务,而不是在整个程序退出时被迫退出。
如果有fini功能。我可以使用sync.Wait在那里实现我的目标。
内置init的另一个优点是它只能并且只能被调用一次,如果我使用用户定义函数替代它们,这将是我自己的关注点。
最佳答案
尝试以下代码:
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
关于go - 为什么不对golang包使用fini()函数? (关闭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61498737/