有用于包初始化的內置 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 關注
- 168 瀏覽
添加回答
舉報
0/150
提交
取消