誰能解釋以下關于 goroutine 的兩個調用之間的區別?方法一fmt.Println("Starting srv")go LOGGER.Error(srv.ListenAndServe())fmt.Println("Starting intSrv")go LOGGER.Error(intSrv.ListenAndServe())執行“Starting srv”后停止方法二go func() { fmt.Println("Starting srv") srv.ListenAndServe()}()go func() { fmt.Println("Starting intSrv") intSrv.ListenAndServe()}()這將執行“Starting srv”和“Starting intSrv”為什么行為不同?
2 回答

紅顏莎娜
TA貢獻1842條經驗 獲得超13個贊
go LOGGER.Error(srv.ListenAndServe())
上面的語句首先計算參數LOGGER.Error()
,然后創建一個 goroutine 并運行LOGGER.Error()
。然而,srv.ListenAndServe
一去不復返。

GCT1015
TA貢獻1827條經驗 獲得超4個贊
Goroutine 函數參數在調用 Goroutine 中進行評估。
在以下聲明中:
go LOGGER.Error(srv.ListenAndServe())
srv.ListenAndServe()
在啟動 goroutine 之前計算表達式以記錄錯誤。srv.ListenAndServe()
直到服務器退出(因為服務器已停止或偵聽器遇到錯誤),調用才會返回。
使用此代碼啟動服務器并記錄從服務器返回的錯誤。
go func() { LOGGER.Error(srv.ListenAndServe()) }()
- 2 回答
- 0 關注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消