gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:45:25 25 4
gpt4 key购买 nike

有内置的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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com