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

相关推荐
脱胎换骨-军哥1 天前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
songroom1 天前
Kimi K3:Rust封装XTP接口详细教程实践
开发语言·后端·rust
kebeiovo1 天前
游戏服务端开发:Actor模型详解(Go语言)
开发语言·后端·golang
红烧大青虫1 天前
setInterval 倒计时实现:60s 验证码发送逻辑
后端·华为·harmonyos·鸿蒙系统
迷途呀1 天前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
Herbert_hwt1 天前
建立Java程序开发
java·开发语言
小村儿1 天前
连载14-实战篇--一个半月,我一个人和 Claude Code 搭出一套数字人工程
前端·后端·ai编程
你驴我1 天前
WhatsApp 多账号下消息已读回执的实时聚合与推送实践
后端·python
用户208046804561 天前
Python3 注释编写完全指南:从基础规范到高效实践
后端
愚公移码1 天前
蓝凌EKP18产品:流程虚拟机(PVM)
java·开发语言·前端