Function 为什么这些goroutines没有打印到控制台?
在某些情况下,我无法解释戈罗蒂人的行为。我试着举个简单的例子。 这是我自己的文件main.go: 我希望在一个周期中调用三次的3个函数都是并发执行的,结果是打印编号的顺序是不可预测的。 我不明白为什么程序编译和执行时没有任何错误,但它不会在控制台上打印任何东西! 实际上,就好像没有执行for中的函数调用一样。如果我删除go子句,打印结果将显示在控制台上。我得出的结论是并行线程无权在我的控制台上打印。如何查看这些具有实际并发行为的打印 如何查看这些具有实际并发行为的打印Function 为什么这些goroutines没有打印到控制台?,function,go,concurrency,goroutine,Function,Go,Concurrency,Goroutine,在某些情况下,我无法解释戈罗蒂人的行为。我试着举个简单的例子。 这是我自己的文件main.go: 我希望在一个周期中调用三次的3个函数都是并发执行的,结果是打印编号的顺序是不可预测的。 我不明白为什么程序编译和执行时没有任何错误,但它不会在控制台上打印任何东西! 实际上,就好像没有执行for中的函数调用一样。如果我删除go子句,打印结果将显示在控制台上。我得出的结论是并行线程无权在我的控制台上打印。如何查看这些具有实际并发行为的打印 如何查看这些具有实际并发行为的打印 一旦生成goroutine
一旦生成goroutines,让main等待或执行其他操作。现在,它只返回终止程序及其goroutines的命令。要获得预期结果,请等待goroutines完成,然后退出程序
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func print1() {
fmt.Println("print 1")
wg.Done()
}
func print2() {
fmt.Println("print 2")
wg.Done()
}
func print3() {
fmt.Println("print 3")
wg.Done()
}
func main() {
for i := 0; i < 3; i++ {
wg.Add(1)
go print1()
}
for i := 0; i < 3; i++ {
wg.Add(1)
go print2()
}
for i := 0; i < 3; i++ {
wg.Add(1)
go print3()
}
wg.Wait()
}
和的可能重复。一个解决方案涉及错误组
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func print1() {
fmt.Println("print 1")
wg.Done()
}
func print2() {
fmt.Println("print 2")
wg.Done()
}
func print3() {
fmt.Println("print 3")
wg.Done()
}
func main() {
for i := 0; i < 3; i++ {
wg.Add(1)
go print1()
}
for i := 0; i < 3; i++ {
wg.Add(1)
go print2()
}
for i := 0; i < 3; i++ {
wg.Add(1)
go print3()
}
wg.Wait()
}