Rest golang:监视worker goroutine的web服务

Rest golang:监视worker goroutine的web服务,rest,go,Rest,Go,假设我正在golang中编写一个REST web服务。在内部,我有几个worker goroutine做一些事情。此类goroutine由HTTP API按需触发。当然,我想以某种方式监控这些goroutines的进展。通常,goroutine会有一个频道发送更新、错误等,主程序会在这些频道上执行select 但是,由于主程序的偶数循环忙于http.ListenAndServe(),因此我看不到实现这一点的方法。考虑到这似乎是一个非常常见的问题,我想知道是否有一个设计模式我遗漏了 [编辑] 更多

假设我正在golang中编写一个REST web服务。在内部,我有几个worker goroutine做一些事情。此类goroutine由HTTP API按需触发。当然,我想以某种方式监控这些goroutines的进展。通常,goroutine会有一个频道发送更新、错误等,主程序会在这些频道上执行
select

但是,由于主程序的偶数循环忙于
http.ListenAndServe()
,因此我看不到实现这一点的方法。考虑到这似乎是一个非常常见的问题,我想知道是否有一个设计模式我遗漏了

[编辑] 更多的技术细节。所以我有一个
Resource
类来管理一个资源池
Resource.DoSomething()
是一个很长的操作,因此它将在后台启动一个goroutine。将打开一个通道以允许轮询状态


当某个HTTP请求传入时,会触发此
DoSomething()
。但我没有背景来调查现状。目前我愚蠢的计划是在下一个HTTP请求到来时轮询通道以获取输入。这应该足够了,但并不理想-我想马上知道goroutine中发生了什么。

启动一个Go例程,专门运行包含监控的select,将select放入自己的
for
循环中:

func main() {

    go func() {
        for {
            select {
            //TODO: Insert Code Here?
            }
        }
    }()

    err := http.ListenAndServe()

    if err != nil {
        //TODO:
    }
}

嗯,这是用来监视goroutines的,对吗?它是如何链接到HTTP监控循环的?如果您不想自己启动,那么框架又如何呢?包含一个日志中间件,也许可以这样做?在
ListenAndServe()之前使用go例程就可以了。但是我想在同一个线程中处理所有内容。@lang2 GOROUTIES在线程上进行多路复用,目前默认情况下,所有内容都在单个线程上运行。您能告诉我们您尝试了什么吗?我不知道你对什么感到困惑。