每天2分钟学习GO语言编程(十九)并发简明教程

go (84) 2023-03-24 21:49

大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。

Go语言天生就支持高并发,通过Goroutine和Channel的特性,可以方便地编写并发程序。以下是Go语言高并发的简明教程:

Goroutine

Goroutine是Go语言的轻量级线程,通过go关键字创建,可以实现函数或方法的异步执行。

func f() {
  // do something
}

func main() {
  go f() // 创建一个Goroutine执行f函数
  // do something
}

在上面的代码中,main函数会创建一个Goroutine来执行f函数,然后继续执行后面的代码。注意,创建Goroutine并不会阻塞当前的函数,即f函数会在一个新的Goroutine中异步执行。

Channel

Channel是Go语言的通信机制,可以用于Goroutine之间的同步和数据传输。

ch := make(chan int) // 创建一个int类型的Channel

go func() {
  ch <- 1 // 将1发送到Channel中
}()

x := <-ch // 从Channel中接收一个值并赋值给x

在上面的代码中,首先创建了一个int类型的Channel,然后在一个新的Goroutine中将1发送到Channel中,接着在主Goroutine中从Channel中接收一个值并赋值给x。注意,当Channel中没有值可用时,接收操作会被阻塞,直到有值可用为止。

Select

Select语句可以用于在多个Channel中等待数据,并执行相应的操作。

ch1 := make(chan int)
ch2 := make(chan int)

go func() {
  ch1 <- 1
}()

go func() {
  ch2 <- 2
}()

select {
case x := <-ch1:
  fmt.Println(x) // 输出1
case x := <-ch2:
  fmt.Println(x) // 输出2
}

在上面的代码中,首先创建了两个Channel,并在两个新的Goroutine中分别向它们发送了一个值。然后在主Goroutine中使用select语句等待这两个Channel中的数据,并执行相应的操作。注意,当有多个Case同时满足条件时,select会随机选择一个执行。

以上就是Go语言高并发的简明教程,通过Goroutine和Channel的特性,可以方便地编写高效、高并发的程序。希望对大家有所帮助。编程的路上不孤独。

发表回复