我有一个用Go语言编写的运行时间较长的服务器。Main会触发执行程序逻辑的多个goroutine。在那之后主要没有任何用处。一旦主程序退出,程序将退出。我现在使用的使程序运行的方法只是对fmt.Scanln()的简单调用。我想知道其他人如何阻止main退出。以下是一个基本示例。在这里可以使用哪些想法或最佳做法?
我考虑过创建一个通道并通过接收该通道来延迟main的退出,但是我认为如果我的所有goroutine在某个时候都变得不活动,那可能会出现问题。
旁注:在我的服务器(不是示例)中,该程序实际上并没有连接到Shell上运行,因此无论如何与控制台进行交互都没有任何意义。目前它可以工作,但是我正在寻找“正确”的方法,假设有一种方法。
package main
import (
"fmt"
"time"
)
func main() {
go forever()
//Keep this goroutine from exiting
//so that the program doesn't end.
//This is the focus of my question.
fmt.Scanln()
}
func forever() {
for ; ; {
//An example goroutine that might run
//indefinitely. In actual implementation
//it might block on a chanel receive instead
//of time.Sleep for example.
fmt.Printf("%v+\n", time.Now())
time.Sleep(time.Second)
}
}
LEATH
jeck猫
相关分类