package freeport import ( "net" ) // GetFreePort asks the kernel for a free open port that is ready to use. func GetFreePort() (int, error) { addr, err := net.ResolveTCPAddr("tcp", "localhost:0") if err != nil { return 0, err } l, err := net.ListenTCP("tcp", addr) if err != nil { return 0, err } defer l.Close() return l.Addr().(*net.TCPAddr).Port, nil } // GetPort is deprecated, use GetFreePort instead // Ask the kernel for a free open port that is ready to use func GetPort() int { port, err := GetFreePort() if err != nil { panic(err) } return port } // GetFreePort asks the kernel for free open ports that are ready to use. func GetFreePorts(count int) ([]int, error) { var ports []int for i := 0; i < count; i++ { addr, err := net.ResolveTCPAddr("tcp", "localhost:0") if err != nil { return nil, err } l, err := net.ListenTCP("tcp", addr) if err != nil { return nil, err } defer l.Close() ports = append(ports, l.Addr().(*net.TCPAddr).Port) } return ports, nil }