Go: SNMPTRAPの負荷分散と流量制御したい

package main

import (
	"fmt"
	"net"
	"os"
	"time"
)

const rateLimit = 100 // Packets per second
const serverCount = 3  // Number of servers to load balance

func main() {
	// Listen to incoming UDP packets
	ln, err := net.ListenPacket("udp", ":8080")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	defer ln.Close()

	// Create a buffer to hold incoming data
	buf := make([]byte, 1024)

	servers := []string{
		"server1.example.com:8080",
		"server2.example.com:8080",
		"server3.example.com:8080",
	}

	for {
		// Read incoming data
		n, addr, err := ln.ReadFrom(buf)
		if err != nil {
			fmt.Println(err)
			continue
		}

		// Load balance the incoming data to different servers
		go func(n int, buf []byte, addr net.Addr) {
			for i, server := range servers {
				// Connect to the remote server
				conn, err := net.Dial("udp", server)
				if err != nil {
					fmt.Println(err)
					continue
				}
				defer conn.Close()

				// Write the incoming data to the remote server with rate limit
				for i := 0; i < n; i += rateLimit {
					_, err = conn.Write(buf[i : i+rateLimit])
					if err != nil {
						fmt.Println(err)
						return
					}
					time.Sleep(time.Second / rateLimit / serverCount)
				}
			}
		}(n, buf, addr)
	}
}