我正在编写一个使用长轮询的服务器,基本上我有一个定期运行的go例程并通过一个通道发送响应。但是,当程序试图发送到频道时程序会卡住。
我制作了一个简单的程序来演示这个问题:
package main
import (
"log"
"time"
)
var resp chan string
func main() {
go send()
listen()
}
func listen() {
select {
case response := <-resp:
log.Printf("Writing response: %s\n", response)
}
}
func send() {
ticker := time.NewTicker(time.Duration(10000) * time.Millisecond)
select {
case <-ticker.C:
// program gets stuck here
log.Println("Sending")
resp <- "Message"
}
}
有谁看到问题可能是什么?感谢
答案 0 :(得分:3)
您必须先使用频道才能使用
var resp = make(chan string)