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

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

Go:異步啟動HTTP服務器,但如果啟動失敗,則返回錯誤

Go:異步啟動HTTP服務器,但如果啟動失敗,則返回錯誤

Go
料青山看我應如是 2022-08-24 10:32:31
我想在goroutine中啟動HTTP服務器,但如果啟動失敗,其父級將返回錯誤。有沒有一個好的方法來做到這一點?我嘗試在通道中傳遞錯誤。但是,即使服務器成功啟動,這也會使父塊生效(除非我引入了在該通道上進行偵聽的任意超時)。func Start() error {  go func() {     srv = &http.Server{...}     if err := srv.ListenAndServe(); err != http.ErrServerClosed {       // return err from Start()     }  }  // return nil if server started successfully}
查看完整描述

2 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

ListenAndServe是一個幫助器函數,它打開一個監聽套接字,然后在該套接字上提供連接。


ListenAndServer 中的啟動錯誤位于函數的 listen 部分中。在主 goroutine 上創建偵聽器并在那里處理錯誤。在 goroutine 中運行服務器:


l, err := net.Listen("tcp", ":8080") // adjust arguments as needed.

if err != nil {

    // Handle error.

}


srv = &http.Server{...}

go func() {

   if err := srv.Serve(l); err != nil {

       // Handle non-startup errors here.

 }()


查看完整回答
反對 回復 2022-08-24
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

如果要堅持該模式,請通過通道發送錯誤以指示初始化成功或關閉通道。主線程可以拾取這兩個操作,它將停止被阻止。nil



查看完整回答
反對 回復 2022-08-24
  • 2 回答
  • 0 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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