【发布时间】:2022-01-09 06:16:09
【问题描述】:
我是否正确假设在 Go 语言中,这两种表述总是等价的?
func f() {
// Do stuff
}
go f()
和
func f() {
go func(){
// do stuff
}()
)
【问题讨论】:
-
现在是(我更正了)
-
所写的语句具有相同的结果。第一个通常是首选,因为调用者控制并发。
-
但是,如果 f() 必须始终作为单独的进程调用,那么第二个公式会自动执行该任务。
-
通常情况下可能并不总是需要并发,或者根据上下文以不同的方式构建同步可能更方便。约定通常是让调用者决定直接调用的函数何时需要并发,并且只根据需要调度 goroutine 作为实现细节的一部分。
-
第一个公式允许调用者用其他代码将
// do stuff括起来,等待// do stuff完成等。第二个公式可能是您实际问题的正确选择,但它是并非在所有情况下都是正确的选择。