goroutine语句执行和函数执行的不同行为
有人能解释下面两个关于goroutines的电话之间的区别吗 方法1 执行“启动srv”后停止 方法2 这将同时执行“启动srv”和“启动intSrv”goroutine语句执行和函数执行的不同行为,go,go-http,Go,Go Http,有人能解释下面两个关于goroutines的电话之间的区别吗 方法1 执行“启动srv”后停止 方法2 这将同时执行“启动srv”和“启动intSrv” 为什么行为不同?在调用Goroutine中计算Goroutine函数参数 在以下声明中: go LOGGER.Error(srv.ListenAndServe()) 表达式srv.ListenAndServe()在启动goroutine以记录错误之前进行计算。对srv.ListenAndServe()的调用在服务器退出之前不会返回(因为服务器
为什么行为不同?在调用Goroutine中计算Goroutine函数参数 在以下声明中:
go LOGGER.Error(srv.ListenAndServe())
表达式srv.ListenAndServe()
在启动goroutine以记录错误之前进行计算。对srv.ListenAndServe()
的调用在服务器退出之前不会返回(因为服务器已停止或侦听器遇到错误)
使用此代码启动服务器并记录服务器返回的错误
go func() { LOGGER.Error(srv.ListenAndServe()) }()
上面的语句首先计算
LOGGER.Error()
的参数,然后创建一个goroutine并运行LOGGER.Error()
。但是,srv.listendandserve
永远不会返回。您能提供一个运行的最小示例吗?第一个程序不应该像您描述的那样运行。@bserdar稍微更改了程序,实际上忘记了包含记录器,因为我认为它没有任何意义,但记录器导致了问题,不确定原因
go LOGGER.Error(srv.ListenAndServe())
go func() { LOGGER.Error(srv.ListenAndServe()) }()
go LOGGER.Error(srv.ListenAndServe())