Go语言中使用goroutine来实现多线程,goroutine是一种轻量级的线程,可以在一个或多个逻辑处理器上运行。用go关键字启动一个goroutine,就会建立一个新的goroutine并在其中运行对应的函数。
下面是一个简单的例子:
package main
import (
"fmt"
"time"
)
func hello() {
fmt.Println("Hello Goroutine!")
}
func main() {
go hello()
time.Sleep(1 * time.Second) //等待输出结果
}
这里我们定义了一个hello函数,用go关键字启动一个goroutine来执行它。注意,在main函数中我们需要使用time.Sleep函数等待一秒钟,让goroutine有足够的时间来输出结果。
除了使用goroutine,Go语言还提供了channel来实现多个goroutine之间的通信和同步。channel是一种类型安全的管道,可以用于在goroutine之间传递数据。
下面是一个使用channel实现多个goroutine协作的例子:
package main
import (
"fmt"
)
func producer(ch chan<- int) { //发送数据到channel
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
}
func consumer(ch <-chan int) { //从channel接收数据
for i := range ch {
fmt.Println(i)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
在这个例子中,我们定义了两个函数producer和consumer,分别用于向channel发送数据和从channel接收数据。在main函数中,我们创建了一个channel并通过producer函数将数据发送到该channel,在另一个goroutine中使用consumer函数从该channel中取出数据并输出。
注意,在这个例子中我们使用了make函数来创建channel,并用close函数关闭channel以避免死锁。