美文网首页
3:golang获取可用空闲的端口号

3:golang获取可用空闲的端口号

作者: 陈玉涛 | 来源:发表于2019-08-09 14:34 被阅读0次

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

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

相关文章

网友评论

      本文标题:3:golang获取可用空闲的端口号

      本文链接:https://www.haomeiwen.com/subject/tcchjctx.html