Go语言是一门天生支持并发编程的语言,其中最重要的特性之一就是goroutine(协程)。Goroutine是轻量级的执行线程,它由Go语言运行时系统管理,并由go关键字创建。
使用go关键字创建goroutine非常简单,只需要在函数或方法前面加上go关键字即可。例如:
代码语言:javascript复制func hello() {
fmt.Println("Hello")
}
func main() {
go hello()
fmt.Println("World")
}
在上面的示例中,我们定义了一个hello函数,它会打印出“Hello”。然后,在主函数中,我们使用go关键字启动了一个hello函数的goroutine,并打印出“World”。
由于hello函数的goroutine是并发运行的,因此它和主函数是同时运行的。在主函数中,我们先打印了“World”,然后才启动了hello函数的goroutine。因此,在输出中,“World”会先打印出来,而“Hello”会在其后面打印出来。
以下是另一个使用go关键字创建goroutine的示例:
代码语言:javascript复制func printNumbers() {
for i := 1; i <= 10; i {
fmt.Print(i, " ")
}
}
func main() {
go printNumbers()
fmt.Println("Waiting for goroutine to finish...")
time.Sleep(time.Second)
}
在上面的示例中,我们定义了一个printNumbers函数,它会打印出1到10的数字。然后,在主函数中,我们使用go关键字启动了一个printNumbers函数的goroutine,并打印出“Waiting for goroutine to finish...”。为了确保goroutine有足够的时间打印所有数字,我们使用time.Sleep函数暂停了1秒钟。
由于printNumbers函数的goroutine是并发运行的,因此它和主函数是同时运行的。在主函数中,我们先打印了“Waiting for goroutine to finish...”,然后才启动了printNumbers函数的goroutine。因此,在输出中,我们会先看到“Waiting for goroutine to finish...”,然后才会看到数字序列。