Go:服务怎么做到监听随机端口

Go语言精选

共 1075字,需浏览 3分钟

 ·

2022-01-14 06:14

点击上方蓝色“Go语言中文网”关注,每天一起学 Go

通常,服务一般会监听固定的端口。不过如果是本地测试服务,也许有时候想随机一个可用的端口。比如 Python 可以这么做:

$ python -m SimpleHTTPServer 0
Serving HTTP on 0.0.0.0 port 43481 ...

Python 可以,Go 肯定也可以。那 Go 中如何实现呢?

直接上代码:

package main

import (
    "log"
    "net"
    "net/http"
)

func createListener() (l net.Listener, close func()) {
    l, err := net.Listen("tcp"":0")
    if err != nil {
        panic(err)
    }

    return l, func() {
        _ = l.Close()
    }
}

func main() {
    l, close := createListener()
    defer close()

    http.Handle("/", http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
        // 添加你的代码
    }))

    log.Println("listening at", l.Addr().(*net.TCPAddr).Port)
    http.Serve(l, nil)
}

运行看:

$ go run main.go 
2022/01/04 17:40:16 listening at 33845

参考:https://dev.to/clavinjune/listening-to-random-available-port-in-go-6bl



推荐阅读


福利

我为大家整理了一份从入门到进阶的Go学习资料礼包,包含学习建议:入门看什么,进阶看什么。关注公众号 「polarisxu」,回复 ebook 获取;还可以回复「进群」,和数万 Gopher 交流学习。

浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报