test.go
1package test
2
3import (
4 "net"
5 "sync"
6)
7
8var (
9 used = map[int]struct{}{}
10 lock sync.Mutex
11)
12
13// RandomPort returns a random port number.
14// This is mainly used for testing.
15func RandomPort() int {
16 addr, _ := net.Listen("tcp", ":0") //nolint:gosec
17 _ = addr.Close()
18 port := addr.Addr().(*net.TCPAddr).Port
19 lock.Lock()
20
21 if _, ok := used[port]; ok {
22 lock.Unlock()
23 return RandomPort()
24 }
25
26 used[port] = struct{}{}
27 lock.Unlock()
28 return port
29}