【发布时间】:2019-01-12 22:20:39
【问题描述】:
如果我在 main 或 func home 的任何地方使用 chan,应用程序会运行,但实际上并不能正常工作。没有抛出错误,但是,它不起作用。 如果我删除频道引用,它会恢复工作。 通过在结构中使用 chan 或全局通道,应用程序将停止工作。
在GET 请求中,它从func home 返回h.Message
通过在代码中添加任何频道,GET 请求不会返回消息。
https://play.golang.org/p/-ZVcLhZRRRG
package main
import (
"fmt"
"net/http"
"github.com/gorilla/websocket"
// _ "github.com/go-sql-driver/mysql"
)
type WMessage struct {
Message string `json:"message"`
ch chan string
}
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool {
return true
},
}
var Chann chan string
func (h *WMessage) home(w http.ResponseWriter, r *http.Request) {
h.Message = "hey this is the message from home"
fmt.Fprintln(w, h.Message)
fmt.Println(<-h.ch)
}
func main() {
hom := &WMessage{}
hom.ch = make(chan string)
hom.ch <- "message sent"
http.HandleFunc("/", hom.home)
err := http.ListenAndServe(":3000", nil)
if err != nil {
fmt.Println("there was an error -> ", err)
}
}
【问题讨论】:
-
“它不起作用”不是问题陈述。它以什么方式不起作用?你看到发生了什么?你有什么期待?
-
装袋?我不知道那是什么意思。但我读了你的整个问题。你的问题确实不回答了我问你的问题。具体来说:您认为发生了什么?你期望什么?
-
我希望它返回到
h.Message,由于某种原因,当在那里使用通道时,当向服务器发出GET请求时,它会停止返回h.Message。通过从代码中删除任何channel,它就可以工作了。