goroutine

packagemainimport"fmt"import"time"funcprintn(idint){fori:=0;i<10;i++{fmt.Println(id,":",i)}}funcmain(){fori:=0;i<5;i++{goprintn(i)}fmt.Println("waiting...")time.Sleep(time.Second*3)}//执行结果:waiting...0:02:00:12:10:21:02:20:32:31:10:42:40:51:22:50:61:32:60:71:42:71:53:03:13:22:81:62:91:73:30:80:91:83:43:53:63:73:83:91:94:04:14:24:34:44:54:64:74:84:9//如果把sleep去掉会怎么样?packagemainimport"fmt"//import"time"funcprintn(idint){fori:=0;i<10;i++{fmt.Println(id,":",i)}}funcmain(){fori:=0;i<5;i++{goprintn(i)}fmt.Println("waiting...")//time.Sleep(time.Second*3)}//执行结果:waiting...//原因是没有sleep,当main函数执行完会中断其他所有没执行完的任务

2、channel

packagemainimport"fmt"//import"time"funcprintn(idint,cchanint){fori:=0;i<10;i++{fmt.Println(id,":",i)}c<-0//将数值存到c}funcmain(){c:=make(chanint)//创建一个channelgoprintn(1,c)//fori:=0;i<5;i++{//goprintn(i)//}fmt.Println("waiting...")//time.Sleep(time.Second*3)<-c//取出c得值}//执行结果:waiting...1:01:11:21:31:41:51:61:71:81:9

3、select

packagemainimport"fmt"import"time"funcfun1(cchanstring){for{c<-"fromfun1+"time.Sleep(time.Second*2)}}funcfun2(cchanstring){for{c<-"fromfun2-"time.Sleep(time.Second*2)}}funcmain(){c1:=make(chanstring)c2:=make(chanstring)gofun1(c1)gofun2(c2)for{select{casemsg1:=<-c1:fmt.Println(msg1)casemsg2:=<-c2:fmt.Println(msg2)}}}//执行结果:fromfun2-fromfun1+fromfun2-fromfun1+fromfun1+fromfun2-fromfun2-fromfun1+fromfun1+fromfun2-...........