golang获取可用空闲的端口号

获取一个空闲可用的端口号

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
}
//单元测试
func TestGetFreePorts(t *testing.T) {
    port, err := GetFreePort()
    if err != nil {
        log.Println(err)
    }
    log.Println(port)
}
//输出:
=== RUN   TestGetFreePorts
2019/08/09 14:31:46 36994
--- PASS: TestGetFreePorts (0.02s)
PASS

获取多个空闲可用端口

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
}

//单元测试
func TestGetFreePorts(t *testing.T) {
    port, err := GetFreePorts(3)
    if err != nil {
        log.Println(err)
    }
    log.Println(port)
}
//输出
=== RUN   TestGetFreePorts
2019/08/09 14:33:20 [37041 37042 37043]
--- PASS: TestGetFreePorts (0.02s)
PASS

本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2021/03/28 01:29