go协程实例-1

package mainimport ( "fmt" )func main() { c:=make(chan int) go print(c) c<-1 c<-2 //保障协程运行完毕,主协程main运行结束之后,其他协程也全部结束 //time.Sleep(time.Duration(time.Second*5))} func print(c chan int){ for{ fmt.Println("============") fmt.Println(<-c) } }

输出结果有两种:
============ 1 ============ 2 ============

============ 1 ============

产生不同输出结果的原因是,main生成的协程一直循环去信道c里面的数据,可能在循环取数过程中,main协程结束,此时,由main生成的协程也全部结束。如果想让print协程全部结束,可以执行
time.Sleep(time.Duration(time.Second*5))

,让main协程暂停5秒,输出结果为:
============ 1 ============ 2 ============

【go协程实例-1】这是因为print协程在输出1,2后,再次准备从信道内取数,但是此时已经没有向信道内发送数据的操作,所以此时产生了阻塞,阻塞5秒后,main协程结束,全部协程结束。

    推荐阅读