为什么不为golang包提供fini()函数? (已关闭)

问题描述 投票:-4回答:2

有用于包装初始化的内置init()函数。为什么不破坏呢?例如,我在程序包中初始化了一个goroutine池,并且希望该池中的所有goroutine在退出之前完成其任务,而不是在整个程序退出时被迫退出。

如果有fini功能。我可以使用sync.Wait在那里完成我的目标。

内置init的另一个优点是它只能并且只能被调用一次,如果我使用用户定义函数替代它们,这将是我自己的担忧。

go package goroutine
2个回答
1
投票

尝试以下代码:

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

0
投票

在函数main中执行fini可以解决我的问题

© www.soinside.com 2019 - 2024. All rights reserved.