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

相关推荐
像风一样的男人@8 分钟前
python --读取psd文件
开发语言·python·深度学习
输出输入10 分钟前
前端核心技术
开发语言·前端
加油,小猿猿10 分钟前
Java开发日志-双数据库事务问题
java·开发语言·数据库
神奇小汤圆11 分钟前
Unsafe魔法类深度解析:Java底层操作的终极指南
后端
薛定谔的猫喵喵16 分钟前
天然气压力能利用系统综合性评价平台:基于Python和PyQt5的AHP与模糊综合评价集成应用
开发语言·python·qt
独好紫罗兰28 分钟前
对python的再认识-基于数据结构进行-a004-列表-实用事务
开发语言·数据结构·python
gjxDaniel29 分钟前
Objective-C编程语言入门与常见问题
开发语言·objective-c
choke23340 分钟前
[特殊字符] Python异常处理
开发语言·python
云中飞鸿40 分钟前
linux中qt安装
开发语言·qt
神奇小汤圆44 分钟前
浅析二叉树、B树、B+树和MySQL索引底层原理
后端