谁能解释以下关于 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条经验 获得超12个赞
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 关注
- 91 浏览
添加回答
举报
0/150
提交
取消