热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用http.ListenAndServe中的下一个可用端口

如何解决《如何使用http.ListenAndServe中的下一个可用端口》经验,为你挑选了1个好方法。

我写了一个简单的Web服务器来监听端口8080.但我不想使用硬编码的端口号.我想要的是我的服务器监听任何可用的端口.我想知道我的Web服务器正在侦听的端口号.

我的代码如下:

package main

import (
    "net/http"
)

func main() {       
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)

}

icza.. 48

您可以使用端口0来指示您没有指定确切的端口,但是您希望系统选择一个可用的可用端口:

http.ListenAndServe(":0", nil)

这样做的问题是您将无法找到分配的端口.所以你需要创建net.Listener自己(使用该net.Listen()函数),并手动将其传递给http.Serve():

listener, err := net.Listen("tcp", ":0")
if err != nil {
    panic(err)
}

fmt.Println("Using port:", listener.Addr().(*net.TCPAddr).Port)

panic(http.Serve(listener, nil))

示例输出:

Using port: 42039

如您所见,您可以net.Listener从其net.Addr地址(通过其Addr()方法获取)访问分配的端口.net.Addr不直接提供对端口的访问,但是由于我们创建了net.Listener使用tcp网络流,因此net.Addr它将是动态类型*net.TCPAddr(我们可以通过类型断言获取),这是一个结构并且有一个字段Port int.

请注意,如果您不需要应用程序中的端口(例如,您只想自己显示它),则不需要类型断言,只需打印listener.Addr()(最后将包含端口):

fmt.Println("Address:", listener.Addr())

示例输出:

Address: [::]:42039

另外不要忘记处理返回的错误(http.ListenAndServe()在这种情况下).在我的例子中,我简单地将它传递给panic()因为http.LitenAndServe()http.Serve()阻止一切顺利(所以如果出现错误,我们只会返回panic()).



1> icza..:

您可以使用端口0来指示您没有指定确切的端口,但是您希望系统选择一个可用的可用端口:

http.ListenAndServe(":0", nil)

这样做的问题是您将无法找到分配的端口.所以你需要创建net.Listener自己(使用该net.Listen()函数),并手动将其传递给http.Serve():

listener, err := net.Listen("tcp", ":0")
if err != nil {
    panic(err)
}

fmt.Println("Using port:", listener.Addr().(*net.TCPAddr).Port)

panic(http.Serve(listener, nil))

示例输出:

Using port: 42039

如您所见,您可以net.Listener从其net.Addr地址(通过其Addr()方法获取)访问分配的端口.net.Addr不直接提供对端口的访问,但是由于我们创建了net.Listener使用tcp网络流,因此net.Addr它将是动态类型*net.TCPAddr(我们可以通过类型断言获取),这是一个结构并且有一个字段Port int.

请注意,如果您不需要应用程序中的端口(例如,您只想自己显示它),则不需要类型断言,只需打印listener.Addr()(最后将包含端口):

fmt.Println("Address:", listener.Addr())

示例输出:

Address: [::]:42039

另外不要忘记处理返回的错误(http.ListenAndServe()在这种情况下).在我的例子中,我简单地将它传递给panic()因为http.LitenAndServe()http.Serve()阻止一切顺利(所以如果出现错误,我们只会返回panic()).


推荐阅读
author-avatar
老鼠爱上毛ee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有