背景
在golang中 需要同时监听多个端口 对http请求进行相同的处理(handler)
实现
代码如下 很简单
func handler1(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello!")
}
func main() {
ports := []string{":25000", ":25001"}
for _, v := range ports {
go func(port string) { //每个端口都扔进一个goroutine中去监听
mux := http.NewServeMux()
mux.HandleFunc("/", handler1)
http.ListenAndServe(port, mux)
}(v)
}
select {}
}
注意点
1 如果直接在goroutine中使用range出来的value 会提示range variable v captured by func literal
go func() {
mux := http.NewServeMux()
mux.HandleFunc("/", handler1)
http.ListenAndServe(v, mux)
}()
当goroutine中使用到v时,此时v的只都会变成list中最后一个的数值
详情可见:https://segmentfault.com/a/1190000010884717
2 不使用select{}
for循环后 生成goroutine 然后就直接退出了 0.0 这当然不是我们想要的
所以加一个可以让代码停下来的
3 当然 如果想对不同端口接收到的信息进行不同的处理 就需要自行再加上一些判断啦