在应用中使用随机端口启动应用是一个很常见的需求,尤其在微服务架构中做应用负载均衡时尤为常见。在 Golang 中生成随机端口相对比较容易,我们可以通过使用 net 包中的方法就能很快实现。具体实现如下所述。
一、实现原理
主要使用 net 包中的的以下两个方法:
1. ResolveTCPAddr
func ResolveTCPAddr(net, addr string) (*TCPAddr, error)
- ResolveTCPAddr 能将 addr 作为TCP 地址解析并返回
- 参数addr格式为 host:port 或 [ipv6-host%zone]:port
- 解析得到网络名和端口名
- net 可选的值必须是 tcp、tcp4、tcp6其中一个
2. ListenTCP
func ListenTCP(net string, laddr *TCPAddr) (*TCPListener, error)
- ListenTCP在本地TCP地址laddr上声明并返回一个 *TCPListener,
- net 可选的值必须是 tcp、tcp4、tcp6其中一个
- 如果laddr的端口字段为0,函数将选择一个当前可用的端口
- 可以用Listener的Addr方法获得该端口。
二、具体实现
func GetFreePort() (port int, err error) {
// 解析地址
addr, err := net.ResolveTCPAddr("tcp", "