golang获取可用空闲的端口号

/ go / 没有评论 / 2684浏览

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