Go,你也可以的!-【6.1 goroutine】

6.1 goroutine

Go语言中,使用的是协程的概念,也就是goroutine,可以理解为就是一个轻量级的线程。

协程的开销极低,所以我们可以开启大量的协程支持我们的业务实现,这对于并发要求较高的系统是非常友好的。

本节代码存放目录为 lesson16

使用协程

更多底层的东西Go语言官方已经为我们封装好了,我们只需要进行使用即可。

Go语言中,我们使用go关键字就可以快速的开启一个协程。如下代码所示:

go func() {
	for {
		fmt.Printf("当前时间戳: %d\n", time.Now().Unix())
		time.Sleep(time.Duration(1) * time.Second)
	}
}()

在上面的代码中,我们开启了一个协程,每隔1秒打印一次当前的秒级时间戳。

从上面的代码可以看出,开始的标准格式就是这样的:

go func() {
	// 逻辑代码
}()

有的时候,我们会将一些逻辑封装在一个函数中,那么我们可以这样写:

func printNumber() {
	for i := 0; i < 100; i++ {
		fmt.Printf("printNumber: %d\n", i)
		time.Sleep(time.Duration(1) * time.Second)
	}
}

在调用的时候,我们通过go关键词加上函数名称即可,如下所示:

go printNumber()

结合上面的代码,我们的完整示例代码如下:

func main() {
	go func() {
		for {
			fmt.Printf("当前时间戳: %d\n", time.Now().Unix())
			time.Sleep(time.Duration(1) * time.Second)
		}
	}()

	go printNumber()

	select {}
}

func printNumber() {
	for i := 0; i < 100; i++ {
		fmt.Printf("printNumber: %d\n", i)
		time.Sleep(time.Duration(1) * time.Second)
	}
}

执行示例代码输出结果如下:

printNumber: 0
当前时间戳: 1723790742
当前时间戳: 1723790743
printNumber: 1
printNumber: 2
当前时间戳: 1723790744
printNumber: 3
当前时间戳: 1723790745

从结果我们可以看出,已经实现了并发的效果,两个协程都在执行,执行完成后,协程将会进行自动回收。

在上面的示例代码中,我们使用到了select{},这是为了保证主程序没有终止,在后续章节我们将进行具体介绍。

小结

Go语言的协程比较常用且便捷,是我们进行Go语言开发必须要掌握的知识,这对于之后的深入探索是比较重要的。

关于本节总结如下:

  • Go语言具备一种轻量级的线程:协程

  • 通过go关键字就可以快速开启协程

  • 协程的开销特别小,可以同时开启大量协程来满足需求

书籍地址:https://youcan.golang.website/

书籍代码:https://github.com/YouCanGolang

我的GitHub:https://github.com/swxctx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Swxctx

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值