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

相关推荐
吴声子夜歌5 分钟前
ES6——Symbol详解
开发语言·javascript·es6
摇曳的精灵5 分钟前
Spring boot注解实现信息脱敏
java·spring boot·后端·注解脱敏·信息脱敏
星辰徐哥5 分钟前
C语言运算符的优先级与结合性详解
c语言·开发语言
程序猿大帅6 分钟前
记一次线上翻车:加了Redisson分布式锁,数据还是被并发打穿了
后端
weixin_704266056 分钟前
项目总结一
java·前端·spring boot·后端·spring
HZ·湘怡6 分钟前
顺序表 2 续集 c 实现增删查改
c语言·开发语言·顺序表
JimmtButler6 分钟前
一台电脑,两个 Git 身份:公司 GitLab + 个人 GitHub 共存
后端
han_hanker7 分钟前
js 加减乘除精度问题2
开发语言·javascript·ecmascript
红目香薰7 分钟前
Ascend C 算子:Sigmoid 函数原理深入解析与工程化构建及验证
c语言·开发语言·华为·华为云·昇腾·cann·modelarts
OTWOL8 分钟前
C语言操作符终极揭秘:表达式求值秘籍
c语言·开发语言·c++