golang goroutine、通道和选择

  

goroutine

package 主要      import “fmt”   import “时间”      func  printn (id  int) {   for 小姐::=,0;i<10;我+ +,{   fmt.Println (id、”:“我)   }   }         func  main () {   for 小姐::=0;i<5,我+ +,{   go  printn(我)   }   fmt.Println(“等待…”)   time . sleep (time.Second  *, 3)   }//执行结果:   等待……   0,:0   2,:0   0,:1   2,:1   0,:2   1,:0   2,:2   0,:3   2,:3   1,:1   0,:4   2,:4   0,:5   1,:2   2,:5   0,:6   1,:3   2,:6   0,:7   1,:4   2,:7   1,:5   3,:0   3,:1   3,:2   2,:8   1,:6   2,:9   1,:7   3,:3   0,:8   0,:9   1,:8   3,:4   3,:5   3,:6   3,:7   3,:8   3,:9   1,:9   4,:0   4,:1   4,:2   4,:3   4,:4   4,:5   4,:6   4,:7   4,:8   4,:9//,如果把睡眠去掉会怎么样?   package 主要      import “fmt”//import “时间”      func  printn (id  int) {   for 小姐::=,0;i<10;我+ +,{   fmt.Println (id、”:“我)   }   }         func  main () {   for 小姐::=0;i<5,我+ +,{   go  printn(我)   }   fmt.Println(“等待…”)//time . sleep (time.Second  *, 3)   }//,执行结果:   等待…,,,,,,,,,,,,//原因是没有睡眠,当主函数执行完会中断其他所有没执行完的任务

2频道

package 主要      import “fmt”//import “时间”      func  printn (id  int, c  chan  int) {   for 小姐::=,0;i<10;我+ +,{   fmt.Println (id、”:“我)   }   c  & lt;作用;0,,,,,,//将数值存到,c   }         func  main () {   c :=(chan  int),,,//,创建一个channel    go  printn (1 c)//for 小姐::=0;i<5,我+ +,{//go  printn(我)//}   fmt.Println(“等待…”)//time . sleep (time.Second  *, 3)   & lt;安康;c ,,,,,,,//,取出c得值   }//,执行结果:   等待……   1,:0   1,:1   1,:2   1,:3   1,:4   1,:5   1,:6   1,:7   1,:8   1,:,9

3, select 

package 主要      import “fmt”   import “时间”      func  fun1 (c  chan 字符串){   for  {   c  & lt;作用;“得到fun1  +”   time . sleep (time.Second  *, 2)   }   }      func  fun2 (c  chan 字符串){   ,,,,,,,for  {   ,,,,,,,,,,,,,,,c  & lt;作用;“得到fun2  -”   ,,,,,,,,,,,,,,,time . sleep (* time.Second  2)   ,,,,,,,}   }               func  main () {   c1 :=(chan 字符串)   c2 :=(chan 字符串)   go  fun1 (c1)   go  fun2 (c2)   for  {   select  {,,,,,,,,,,   case  msg1 :=, & lt;作用;c1:   fmt.Println (msg1)   case  msg2 :=, & lt;作用;c2:   ,,,,,,,,,,,,,,,,,,,,,,,fmt.Println (msg2)      }   }      }//,执行结果:      得到fun2  -   得到fun1  +   得到fun2  -   得到fun1  +   得到fun1  +   得到fun2  -   得到fun2  -   得到fun1  +   得到fun1  +   得到fun2  -   ...........


golang goroutine、通道和选择