gpt4 book ai didi

go - 如何最好地保持一个长时间运行的 Go 程序运行?

转载 作者:IT老高 更新时间:2023-10-28 12:59:21 27 4
gpt4 key购买 nike

我有一个用 Go 编写的长期运行的服务器。 Main 触发了几个执行程序逻辑的 goroutine。在那之后, main 没有任何用处。一旦 main 退出,程序将退出。我现在用来保持程序运行的方法只是对 fmt.Scanln() 的简单调用。我想知道其他人如何阻止 main 退出。下面是一个基本的例子。这里可以使用哪些想法或最佳实践?

我考虑过创建一个 channel 并通过在所述 channel 上接收来延迟 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)
}
}

最佳答案

永远封锁。例如,

package main

import (
"fmt"
"time"
)

func main() {
go forever()
select {} // block forever
}

func forever() {
for {
fmt.Printf("%v+\n", time.Now())
time.Sleep(time.Second)
}
}

关于go - 如何最好地保持一个长时间运行的 Go 程序运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543835/

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