2 回答

TA贡献1886条经验 获得超2个赞
有几个问题:
flag.String 返回一个指向字符串的指针。应用程序在调用 http.ListenAndServe 时必须取消引用指针:
log.Fatal(http.ListenAndServe(*ip, nil))
http.ListenAndServe 函数会阻塞,直到发生错误。直到第一台服务器出现故障,第二台服务器才会启动,依此类推。如果打算运行多个服务器,则在 goroutines 中运行服务器。
该应用程序没有任何代码来实现注释中描述的默认设置。
这是提供默认值的更好方向:使用单个字符串标志。检查标志值以确定是否指定了主机、端口或两者。根据需要填写默认值。
func fixAddr(s string) string {
host, port, err := net.SplitHostPort(s)
if err != nil {
host = s // assume s is host only on error
port = ""
}
// Fill in defaults.
if host == "" {
host = "127.0.0.1"
}
if port == "" {
port = "8080"
}
return host + ":" + port
}
addr := flag.String("a","127.0.0.1:8080","")
flag.Parse()
log.Fatal(http.ListenAndServe(fixAddr(*addr), nil))
更好的方向是要求用户在命令行中输入有效地址并将其直接传递给 ListenAndServe。
addr := flag.String("a","127.0.0.1:8080","")
flag.Parse()
log.Fatal(http.ListenAndServe(*addr, nil))

TA贡献1784条经验 获得超8个赞
利用标志默认值。
addr := flag.String("a", "", "")
host := flag.String("i","127.0.0.1","")
port := flag.String("p", "8080","")
flag.Parse()
hostport := *addr
if hostport = "" {
hostPort = net.JoinHostPort(*host, *port)
}
log.Fatal(http.ListenAndServe(hostport, nil))
- 2 回答
- 0 关注
- 94 浏览
添加回答
举报