登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-07 12:27:34 338浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《goroutine 语句执行和函数执行的不同行为》,涉及到,有需要的可以收藏一下

问题内容

任何人都可以解释以下关于 goroutine 的两个调用之间的区别吗?

方法1

fmt.println("starting srv")
go logger.error(srv.listenandserve())
fmt.println("starting intsrv")
go logger.error(intsrv.listenandserve())

执行“starting srv”后停止

方法2

go func() {
    fmt.Println("Starting srv")
    srv.ListenAndServe()
}()

go func() {
    fmt.Println("Starting intSrv")
    intSrv.ListenAndServe()
}()

这会执行“starting srv”和“starting intsrv”

为什么行为不同?


解决方案


go logger.error(srv.listenandserve())

上面的语句首先计算 logger.error() 的参数,然后创建一个 goroutine 并运行 logger.error()。但是,srv.listenandserve 永远不会返回。

goroutine 函数参数在调用 goroutine 中进行评估。

在以下声明中:

go logger.error(srv.listenandserve())

在启动 goroutine 来记录错误之前,会评估表达式 srv.listenandserve()。对 srv.listenandserve() 的调用直到服务器退出才返回(因为服务器已停止或侦听器遇到错误)。

使用此代码启动服务器并记录从服务器返回的错误。

go func() { LOGGER.Error(srv.ListenAndServe()) }()

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>