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():释放监听,避免端口被占用。

相关推荐
cg3310 分钟前
cc-connect,十分钟帮你把 claude code 连接到微信,飞书,钉钉等等平台
后端·openai
用户14278686693212 分钟前
Java多态的底层真相:JVM到底怎么知道该调哪个方法?(面试高频)
后端
初次攀爬者22 分钟前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
摸鱼的春哥1 小时前
惊!黑客靠AI把墨西哥政府打穿了,海量数据被黑
前端·javascript·后端
考虑考虑1 小时前
JDK25模块导入声明
java·后端·java ee
想用offer打牌3 小时前
高并发下如何保证接口的幂等性
后端·面试·状态机
爱勇宝3 小时前
2026一人公司生存指南:用AI大模型,90天跑出你的第一条现金流
前端·后端·架构
golang学习记3 小时前
Go 并发编程:原子操作(Atomics)完全指南
后端
哈里谢顿4 小时前
`127.0.0.1` 和 `0.0.0.0` 有何区别?通过验证 demo来展示
后端
树獭叔叔4 小时前
08-大模型后训练的指令微调SFT:LoRA让大模型微调成本降低99%
后端·aigc·openai