go - 为什么不对golang包使用fini()函数? (关闭)

标签 go package goroutine

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

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

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

最佳答案

尝试以下代码:

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

关于go - 为什么不对golang包使用fini()函数? (关闭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61498737/

相关文章:

go - big.Int 不等于 big.setBytes(bigint.Bytes()) 后收到的一个

logging - 在 log.SetOutput(ioutil.Discard) 之后延迟 log.SetOutput(os.Stdout)

不存在二进制包的操作系统的自述文件链接 (CRAN)

multithreading - Golang 如何在 goroutine 之间共享变量?

go - Mutex 似乎没有正确锁定

go - 导入语句的使用

包 org.apache.axis2 不存在

R包cmd检查-无法识别非ascii字符

具有不同超时的 Golang goroutine-safe http 客户端?

go - 为什么goroutine中的未缓冲 channel 获得了此顺序