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

紅顏莎娜
TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
go LOGGER.Error(srv.ListenAndServe())
上面的語(yǔ)句首先計(jì)算參數(shù)LOGGER.Error()
,然后創(chuàng)建一個(gè) goroutine 并運(yùn)行LOGGER.Error()
。然而,srv.ListenAndServe
一去不復(fù)返。

GCT1015
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
Goroutine 函數(shù)參數(shù)在調(diào)用 Goroutine 中進(jìn)行評(píng)估。
在以下聲明中:
go LOGGER.Error(srv.ListenAndServe())
srv.ListenAndServe()
在啟動(dòng) goroutine 之前計(jì)算表達(dá)式以記錄錯(cuò)誤。srv.ListenAndServe()
直到服務(wù)器退出(因?yàn)榉?wù)器已停止或偵聽(tīng)器遇到錯(cuò)誤),調(diào)用才會(huì)返回。
使用此代碼啟動(dòng)服務(wù)器并記錄從服務(wù)器返回的錯(cuò)誤。
go func() { LOGGER.Error(srv.ListenAndServe()) }()
- 2 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報(bào)
0/150
提交
取消