登录
首页 >  Golang >  Go问答

同时调用函数与 http 服务器

来源:stackoverflow

时间:2024-03-10 19:51:27 279浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《同时调用函数与 http 服务器》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我有一个 http 服务器以及一个通道,如果通道不为空,我会调用函数 functiona()mainhandler() 内有一些将值发送到通道的操作(未显示)。

我的目标:

每当有东西发送到通道时,我希望调用 functiona() 并与 mainhandler() 同时运行,但似乎它们一次只运行一个。我必须等待 functiona() 完成,然后 mainhandler() 才能满足另一个请求。

任何有关我做错的事情的帮助将不胜感激。

func main() {
    c := make(chan string)

    go func() {
        for s := range c {
            functionA(s)
        }
    }()

    http.HandleFunc("/", mainHandler(c))
    http.ListenAndServe(":9000", context.ClearHandler(http.DefaultServeMux))
}

编辑 1:

虽然我希望 functiona()mainhandler() 同时运行,但 functiona() 的每次调用都必须与其自身的其他调用同步。换句话说,任何时候只允许运行一个 functiona() 实例。


解决方案


按照它的写法,一旦 functiona 开始运行,就不会从通道 c 读取任何内容,直到 functiona 返回,因此即使 functiona 与写入 c 的 goroutine 并发运行,其他 goroutine 也会等待写入 c 。 p>

你可以这样做:

go func() {
        for s := range c {
            s:=s 
            go functionA(s)
        }
    }()

这将在单独的 goroutine 中启动 functiona 的每个实例。

到这里,我们也就讲完了《同时调用函数与 http 服务器》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>