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

相关推荐
艾莉丝努力练剑14 分钟前
【Qt:问题解决】Qt程序入口点错误修复:MinGW ABI兼容问题
java·服务器·开发语言·qt·文件系统·动静态库
wuyk5558 小时前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
hey_sml9 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
维克兜率天9 小时前
【维克】ARMA模型:AR与MA的完美结合
后端·restful
萧瑟余晖10 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
是未才10 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
上海安当技术11 小时前
半天接入:USBKey RESTful API + C 动态库,Web 和 C/S 两套集成路径实战
前端·后端·restful·集成·usbkey
ttod_qzstudio11 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
DevUI团队11 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
萧瑟余晖12 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring