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