Go学习笔记—协程

本文介绍了Go语言中协程(goroutine)的轻量级特性,如何通过`go`关键字启动和共享内存,以及通道(channel)在并发通信中的关键作用。通过实例展示了协程异步执行和无序输出的特点,以及通道在控制数据流和同步任务中的应用。
摘要由CSDN通过智能技术生成

Go学习笔记—协程、通道


1、协程

Go协程在执行上是轻量级的线程。

首先定义一个函数f(s),使用一般形式进行函数调用。

func f(from string) {
	for i := 0;i < 3;i++{
		fmt.Println(from,":",i)
	}
}

func main(){
	f("index")
}

//index : 0
//index : 1
//index : 2

Go语言中的关键字go用来开启goroutine。同一个程序中的所有goroutine共享同一个地址空间。

func f(from string) {
   for i := 0;i < 3;i++{
      fmt.Println(from,":",i)
   }
}

func main(){
   f("index")

   go f("value")

   go func(msg string){
      fmt.Println(msg)
   }("going")

   var input string
   fmt.Scanln(&input)  // 程序运行结束后,输入任意值结束程序运行
   fmt.Println("done")
}

Go的goroutine在主函数运行结束前有效。

Go协程是在独立的,异步的运行。

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

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

//hello goroutine
//hello go 
//hello go 
//hello goroutine
//hello goroutine
//hello go 
//hello go 
//hello goroutine
//hello go

根据输出结果,可以看出,主函数在协程运行完成结束之前结束了,所以协程中的数据并没有完全输出。而且输出的结果是无序的,说明协程的运行是异步的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值