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 關注
- 115 瀏覽
添加回答
舉報