为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不使用 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 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信