背景
在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 当然 如果想对不同端口接收到的信息进行不同的处理 就需要自行再加上一些判断啦