goroutine语句执行和函数执行的不同行为

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()的调用在服务器退出之前不会返回(因为服务器

有人能解释下面两个关于goroutines的电话之间的区别吗

方法1 执行“启动srv”后停止

方法2 这将同时执行“启动srv”和“启动intSrv”


为什么行为不同?

在调用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())