Go语言基础语法——并发

本文详细介绍了Go语言中的并发特性,包括goroutine的使用,展示了如何启动一个新的运行期线程,并通过示例解释了通道channel的概念,如何进行数据同步和通讯。还讨论了通道的创建、缓冲区的使用,以及遍历和关闭通道的操作。文章以实际代码示例加深理解,如计算数字之和、通过缓冲区传输数据以及生成斐波那契数列等。
摘要由CSDN通过智能技术生成

一、goroutine

使用go语句可以开启一个新的运行期线程,即goroutine,以一个不同的、新创建的goroutine来执行一个函数,同一个程序中所有的goroutine共享同一个地址空间

实例如下:

package main
  
import (
        "fmt"
        "time"
)

func say(s string) {
        for i := 0; i < 5; i++ {
                time.Sleep(100 * time.Millisecond)
                fmt.Println(s)
        }
}

func main() {
        go say("world")
        say("hello")
}

运行结果:

以上是两个goroutine在执行,没有先后顺序

 

二、通道channel

通道(channel)是用来传递数据的一个数据结构。

通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。

如:

ch <- v    // 把 v 发送到通道 ch
v := <-ch  // 从 ch 接收数据
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值