有用于包初始化的內(nèi)置 init() 函數(shù)。為什么不為破壞而終結(jié)?例如,我在我的包中初始化了一個(gè) goroutine 池,我希望池中的所有 goroutine 在退出之前完成它們的任務(wù),而不是在整個(gè)程序退出時(shí)被迫退出。如果有fini功能。我可以使用 sync.Wait 來實(shí)現(xiàn)我的目標(biāo)。內(nèi)置 init 的另一個(gè)優(yōu)點(diǎn)是它可以而且只能被調(diào)用一次,如果我使用用戶定義函數(shù)作為它們的替代品,這將是我自己關(guān)心的問題。
2 回答

慕的地8271018
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
試試下面的代碼:
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 關(guān)注
- 165 瀏覽
添加回答
舉報(bào)
0/150
提交
取消