chan T //可以接收和发送类型为T的数据 chan<-T //只写channel <-chan t//只读channel
funcmain() { c := make(chanint) go send(c) go recv(c) time.Sleep(3 * time.Second) } //只读只写channel只有在参数传递中能有作用 funcsend(c chan<- int) { for i := 0; i < 10; i++ { c <- i } }
funcrecv(c <-chanint) { for i := range c { fmt.Println(i) } }
funcmain() { var c1, c2, c3 chanint var i1, i2 int select { case i1 = <-c1: fmt.Printf("received ", i1, " from c1\n") case c2 <- i2: fmt.Printf("sent ", i2, " to c2\n") case i3, ok := (<-c3): // same as: i3, ok := <-c3 if ok { fmt.Printf("received ", i3, " from c3\n") } else { fmt.Printf("c3 is closed\n") } default: fmt.Printf("no communication\n") } }