使用 golang 创建多个 UDP 服务器

Create multiple UDP servers using golang

我有创建 UDP 服务器所需的端口列表。我试过这个方法

for _, r := range routingTable.Routes {
        if r.Metric == 0 {
            wg.Add(1)
            go func() {
                conn, err := net.ListenUDP("udp4", &r.OriginPort)
                if err != nil {
                    log.Fatalf("Error occured starting the server: %s", err)
                } else {
                    log.Printf("Listening on port: %s", r.OriginPort.String())
                }
                defer conn.Close()

                buffer := make([]byte, 1024)
                for {
                    conn.ReadFromUDP(buffer)
                }
            }()
            wg.Wait()
        }
    }

但它不起作用。我该怎么做才能让它发挥作用?

  1. 如@CeriseLimon 所述:不要在每次迭代时都创建 goroutine 块,将 wg.Wait() 移出循环
  2. 不要忘记从每个 goroutine 中调用 wg.Done():在每个函数中添加对 defer wg.Done() 的调用

(因为你的监听 goroutines 从来没有 return,第二点有点理论化......显然,添加一些代码让你的监听 goroutines 做一些事情,如果可能的话干净地退出)