golang获取一个系统中没有被占用的端口

bash 复制代码
package main

import (
    "fmt"
    "net"
)

func GetFreePort() (int, error) {
    // 监听本地 0 端口,让系统自动分配可用端口
    listener, err := net.Listen("tcp", "127.0.0.1:0")
    if err != nil {
        return 0, err
    }
    defer listener.Close() // 记得关闭 listener,释放端口

    addr := listener.Addr().(*net.TCPAddr)
    return addr.Port, nil
}

func main() {
    port, err := GetFreePort()
    if err != nil {
        fmt.Println("获取端口失败:", err)
        return
    }
    fmt.Println("可用端口:", port)
}

核心思路

  • net.Listen("tcp", "127.0.0.1:0"):端口填 0 表示自动分配。

  • listener.Addr().(*net.TCPAddr).Port:获取系统分配的端口。

  • defer listener.Close():释放监听,避免端口被占用。

相关推荐
m0_733612217 分钟前
C++20概念(Concepts)入门指南
开发语言·c++·算法
我爱娃哈哈8 分钟前
SpringBoot + Redis Stream + 消费组:替代 Kafka 轻量级消息队列,低延迟高吞吐
后端
程序员大飞哥9 分钟前
MPTCP 协议全景:从 RFC 6824 到 RFC 8684 的演进
后端
程序员大飞哥10 分钟前
MPTCP 握手全解剖:一条连接是如何"长出"多条腿的
后端
凛訫訫12 分钟前
Java基础--面向对象高级(2)
后端
悟空码字15 分钟前
滑块拼图验证:SpringBoot完整实现+轨迹验证+Redis分布式方案
java·spring boot·后端
Nyarlathotep011315 分钟前
对象头、Monitor与synchronized
后端
luffy545930 分钟前
Rust语言入门-变量篇
开发语言·后端·rust
2301_8073671936 分钟前
C++中的模板方法模式
开发语言·c++·算法
weixin_5375904537 分钟前
《C程序语言设计》练习答案(练习1-3)
c语言·开发语言