A small Go function which will return an available port number. The technique is to setup a server bound to port 0, get the port number, then shutdown the server. Not a perfect technique as there’s a tiny race condition between shutting the server down and using the port, but good enough for what I need it for.
func randomlyAllocatePort() (port int, _ error) {
listener, err := net.Listen("tcp", ":0")
if err != nil {
return 0, err
}
port = listener.Addr().(*net.TCPAddr).Port
if err := listener.Close(); err != nil {
return 0, err
}
return port, nil
}Source: Yellow Duck, with some modifications.