Go 在开放端口上打开URL

Go 在开放端口上打开URL,go,Go,我想我可以像其他很多人一样经营一家公司 现在,我正在尝试改进我的代码,以便在3000正在使用的情况下寻找一个开放端口: for port := 3000; port <= 3005; port++ { fmt.Println(port) err := http.ListenAndServe(":"+strconv.Itoa(port), nil) if err == nil { fmt.Println("lk is serving", dirPath

我想我可以像其他很多人一样经营一家公司

现在,我正在尝试改进我的代码,以便在3000正在使用的情况下寻找一个开放端口:

for port := 3000; port <= 3005; port++ {
    fmt.Println(port)
    err := http.ListenAndServe(":"+strconv.Itoa(port), nil)
    if err == nil {
        fmt.Println("lk is serving", dirPath, "from http://0.0.0.0:", string(port))
        open.Start("http://0.0.0.0:" + string(port))
    }
}

端口的
:=3000;端口不要调用ListendService,而是在应用程序中创建,然后调用。创建侦听器时,通过将侦听器地址指定为“:0”来请求空闲端口:

打开侦听器后,可以启动浏览器:

open.Start("http://" + ln.Addr().String())
然后启动服务器:

if err := http.Serve(ln, nil); err != nil {
   // handle error
}
没有必要使用goroutine

上面的代码用于格式化侦听器的地址。如果出于某种原因确实需要获取端口号,请使用类型断言:

if a, ok := ln.Addr().(*net.TCPAddr); ok {
   fmt.Println("port", a.Port)
}

不要调用ListendService,而是在应用程序中创建,然后调用。创建侦听器时,通过将侦听器地址指定为“:0”来请求空闲端口:

打开侦听器后,可以启动浏览器:

open.Start("http://" + ln.Addr().String())
然后启动服务器:

if err := http.Serve(ln, nil); err != nil {
   // handle error
}
没有必要使用goroutine

上面的代码用于格式化侦听器的地址。如果出于某种原因确实需要获取端口号,请使用类型断言:

if a, ok := ln.Addr().(*net.TCPAddr); ok {
   fmt.Println("port", a.Port)
}

我在哪里可以找到
:0的用法?但是我找不到该用法的文档端口号被传递到发生分配的内核。内核中对端口0的处理是如此的平凡,以至于我认为它在任何地方都没有记录。谢谢!回答得很好。如果您可以使用addr.String()进行查看,那就太棒了,我希望它返回的是主机名而不是[:]。我在哪里可以找到
:0
?但是我找不到此用法的文档端口号被传递到进行分配的内核。内核中对端口0的处理是如此的平凡,以至于我认为它在任何地方都没有记录。谢谢!回答得很好。如果您可以使用addr.String()进行查看,那就太棒了,我希望它返回的是主机名而不是[:]。