web框架中的每个请求是一个gorutine吗?

tablecell · 2019-11-09 10:36:32 · 2053 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2019-11-09 10:36:32 的主题,其中的信息可能已经有所发展或是发生改变。

package main
import "net/http"
func main() {
        c := make(chan string)

    http.HandleFunc("/get", func(w http.ResponseWriter, r *http.Request) {
        msg,_ := <- c
        w.Write([]byte(msg))
    })

   http.HandleFunc("/post", func(w http.ResponseWriter, r *http.Request) {
           c <- "world"
        w.Write([]byte(" world!"))
    })

http.ListenAndServe("localhost:3000", nil)
}

期望 curl http://localhost:3000/post 写channel curl http://localhost:3000/get 读channel 但是一运行就死锁了


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2053 次点击  
加入收藏 微博
6 回复  |  直到 2019-11-15 17:41:55
focusonline
focusonline · #1 · 5年之前

楼主好像对channel有一些误解. 你写的这个东西是无法处理通道的读写通讯的. 通道是等在那里的, 一旦写入就要有人读出, 否则就堵塞... 明白了么...

katsu
katsu · #2 · 5年之前

lz是什么环境,我这里测试正常,只访问其中一个route会阻塞,再访问另一个的话就ok了, channel可以写通

tablecell
tablecell · #3 · 5年之前
katsukatsu #2 回复

lz是什么环境,我这里测试正常,只访问其中一个route会阻塞,再访问另一个的话就ok了, channel可以写通

程序是正常的,我只是想确认一下golang web框架处理http请求是不是来一个请求,就用go func(){ ... }() 来处理的

katsu
katsu · #4 · 5年之前
rubycrack
rubycrack · #5 · 5年之前

是一个gorutine,可以看源码

lcj2019
lcj2019 · #6 · 5年之前

https://juejin.im/post/5afce9e1518825426a1fe3a1 https://studygolang.com/articles/9943 https://github.com/golang/go/blob/master/src/net/http/server.go#L2900-L2932

为每一个请求启动一个协程 c := make(chan string)是全局变量,在哪个协程里面都可以访问

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传