亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 中的標志如何使其連接到服務器

Go 中的標志如何使其連接到服務器

Go
楊魅力 2023-03-07 14:31:48
我正在嘗試創建一個小程序,如果用戶從命令行輸入 ip 或端口,它就會連接到服務器。my codeip := flag.String("i","","") // i choosen user provide ip but port will be default :8080port := flag.String("p", "","") // p choosen has connect to port :???? but ip will be local hostipPort := flaf.String("b","","") // b choosen user provides both ip and portdefault_Ip := flag.String("d","","")// d choosen it connect to localhost ip and port 127.0.0.1:8080flag.Parse()log.Fatal(http.ListenAndServe(ip, nil))log.Fatal(http.ListenAndServe(port, nil))log.Fatal(http.ListenAndServe(ipPort, nil))log.Fatal(http.ListenAndServe(default, nil))我做錯了什么?指出我正確的方向?
查看完整描述

2 回答

?
MM們

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))


查看完整回答
反對 回復 2023-03-07
?
青春有我

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))


查看完整回答
反對 回復 2023-03-07
  • 2 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號