2 回答

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
有幾個(gè)問題:
flag.String 返回一個(gè)指向字符串的指針。應(yīng)用程序在調(diào)用 http.ListenAndServe 時(shí)必須取消引用指針:
log.Fatal(http.ListenAndServe(*ip, nil))
http.ListenAndServe 函數(shù)會(huì)阻塞,直到發(fā)生錯(cuò)誤。直到第一臺服務(wù)器出現(xiàn)故障,第二臺服務(wù)器才會(huì)啟動(dòng),依此類推。如果打算運(yùn)行多個(gè)服務(wù)器,則在 goroutines 中運(yùn)行服務(wù)器。
該應(yīng)用程序沒有任何代碼來實(shí)現(xiàn)注釋中描述的默認(rèn)設(shè)置。
這是提供默認(rèn)值的更好方向:使用單個(gè)字符串標(biāo)志。檢查標(biāo)志值以確定是否指定了主機(jī)、端口或兩者。根據(jù)需要填寫默認(rèn)值。
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貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
利用標(biāo)志默認(rèn)值。
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 關(guān)注
- 114 瀏覽
添加回答
舉報(bào)