亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么不使用 golang 包的 fini() 函數?

為什么不使用 golang 包的 fini() 函數?

Go
Qyouu 2022-06-01 15:28:44
有用于包初始化的內置 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


查看完整回答
反對 回復 2022-06-01
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

在函數 main 中做fini可以解決我的問題



查看完整回答
反對 回復 2022-06-01
  • 2 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號