我想在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.
}()
- 2 回答
- 0 關注
- 196 瀏覽
添加回答
舉報
0/150
提交
取消