freeport.go

 1package freeport
 2
 3import (
 4	"net"
 5)
 6
 7// GetFreePort asks the kernel for a free open port that is ready to use.
 8func GetFreePort() (int, error) {
 9	addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
10	if err != nil {
11		return 0, err
12	}
13
14	l, err := net.ListenTCP("tcp", addr)
15	if err != nil {
16		return 0, err
17	}
18	defer l.Close()
19	return l.Addr().(*net.TCPAddr).Port, nil
20}
21
22// GetPort is deprecated, use GetFreePort instead
23// Ask the kernel for a free open port that is ready to use
24func GetPort() int {
25	port, err := GetFreePort()
26	if err != nil {
27		panic(err)
28	}
29	return port
30}