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

相关推荐
Season450几秒前
C++之模板元编程(前置知识 constexpr)
开发语言·c++
AI玫瑰助手3 分钟前
Python运算符:比较运算符(等于不等等于大于小于)与返回值
android·开发语言·python
Ting-yu4 分钟前
Spring AI Alibaba零基础速成(5) ---- Memory(记忆)
java·人工智能·后端·spring
月落归舟7 分钟前
一文掌握Spring AOP:从入门到底层原理
java·后端·spring
QuZhengRong10 分钟前
【Luck-Report】缓存
java·前端·后端·vue·excel
XiYang-DING22 分钟前
【Spring】SpringMVC
java·后端·spring
想学习java初学者23 分钟前
SpringBoot整合GS1编码解码
java·spring boot·后端
日月云棠24 分钟前
2 快速入门实战指南
java·后端
日月云棠25 分钟前
3 Dubbo 2.7 高级配置:检查控制、版本策略与协议选择
java·后端
计算机安禾25 分钟前
【c++面向对象编程】第40篇:单例模式(Singleton)的多种C++实现
开发语言·c++·单例模式