2 回答

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