当前goroutine评估在新goroutine中执行的函数/方法的输入参数。甚至我们的main()函数也是一个goroutine,它由Go运行时管理的隐式创建的goroutine调用。
package main
import "fmt"
func WelcomeMessage(){
fmt.Println("Welcome to Educative!")
}
func main() {
go WelcomeMessage()
fmt.Println("Hello World!")
}
回想一下,主函数也是一种goroutine,所以当fmt.Println(“Hello World!”)执行时,主goroutine完成,我们退出程序,而不管其他goroutine可能在后台做什么。因此,我们看不到WelcomeMessage()goroutine的输出,因为程序甚至在WelcomeMessage()函数完成之前就退出了。
package main
import "fmt"
func WelcomeMessage(){
fmt.Println("Welcome to Educative!")
}
func main() {
go WelcomeMessage()
go func(){
fmt.Println("Hello World!")
}()
}
以上程序没有输出,这是由于主goroutine再次完成,导致程序在我们从第9行和第10行的goroutine中获得结果之前退出。现在暂停我们的主要goroutine,并给其他goroutine时间来完成,如下面的例子所示。
package main
import (
"fmt"
"time"
)
func WelcomeMessage(){
fmt.Println("Welcome to Educative!")
}
func main() {
go WelcomeMessage()
go func(){
fmt.Println("Hello World!")
}()
time.Sleep(time.Millisecond*200)
}
现在,可以看到看到在main中创建的两个goroutine的结果,因为我们使用了time.Sleep()函数来造成时间延迟,从而允许其他goroutine在我们退出程序之前完成。