如何将用户输入为 int 的端口转换为类型为 ":port" 的字符串(即,它前面应该有一个 ':' 并且应该转换为字符串)。输出必须提供给 http.ListenAndServe()。
问问题
2956 次
4 回答
4
你可以(应该?)使用net.JoinHostPort(host, port string)
.
用 .转换port
为字符串strconv.Itoa
。
它还将处理主机部分包含冒号的情况:“host:port”。直接喂给ListenAndServe
.
这是一些示例代码:
host := ""
port := 80
str := net.JoinHostPort(host, strconv.Itoa(port))
fmt.Printf("host:port = '%s'", str)
// Can be fed directly to:
// http.ListenAndServe(str, nil)
以上可以在操场上运行:https: //play.golang.org/p/AL3obKjwcjZ
于 2014-10-16T18:15:03.403 回答
3
就像是:
p := strconv.Itoa(port)
addr := ":" + p
// or for localhost only
// addr := "localhost:" + p
然后
if err := http.ListenAndServe(addr, nil); err != nil {
log.Fatal("ListenAndServe: ", err)
}
于 2013-07-12T05:28:07.353 回答
3
if err := http.ListenAndServe(fmt.Sprintf(":%d", port), handler); err != nil {
log.Fatal(err)
}
于 2013-07-12T05:37:04.067 回答
-1
我假设您正在使用类似的东西flag.Int
来获取int
.
不要将port int
其作为参数,address string
而应考虑采用,其中地址可以是host[:port]
端口是可选的。
您可以使用这样的函数来确定是否指定了端口:
func hasPort(s string) bool {
return strings.LastIndex(s, ":") > strings.LastIndex(s, "]")
}
(以上借自/src/pkg/net/http/client.go)
这甚至适用于 IPv6 地址。
使用该功能,您可以执行以下操作:
if !hasPort(addr) {
addr += ":80"
}
log.Fatal(http.ListenAndServe(addr, nil))
如果你必须转换一个int,strconv.Itoa
是要走的路。您要避免使用fmt
,因为它使用反射来确定类型,因为静态类型您已经知道类型。
就验证地址本身而言,如果地址不是 可以理解的格式net
,则 使用的包http
将发出一个,因此您只需捕获错误并对其进行处理。error
net
于 2013-07-12T17:49:49.467 回答