package mainimport "fmt"func main() { //定义一个channel c := make(chan int) go func() { defer fmt.Println("defer结束") fmt.Println("goroutine正在运行") c <- 666 //将666发送给c }() num := <-c //从c中接受数据,并赋值给num fmt.Println(num) fmt.Println("goroutine结束")}
package mainimport ( "fmt" "time")func main() { c := make(chan int,3) fmt.Println(len(c),cap(c)) //带有缓冲区的channel go func() { defer fmt.Println("子go结束") for i := 0; i < 3; i++ { c <- i fmt.Println(i,len(c),cap(c)) } }() time.Sleep(time.Second) for i := 0; i < 3; i++ { num:= <-c fmt.Println(num) } fmt.Println("main结束")}
package mainimport "fmt"func main() { c := make(chan int) go func() { for i := 0; i < 5; i++ { c <- i } //close可以关闭一个channel close(c) }() for { //ok如果为true表示channel没有关闭,如果为false表示channel已经关闭 if data, ok := <-c;ok { fmt.Println(data) }else { break; } } fmt.Println("main finished")}
package mainimport "fmt"func main() { c := make(chan int) go func() { for i := 0; i < 5; i++ { c <- i } //close可以关闭一个channel close(c) }() //for { // //ok如果为true表示channel没有关闭,如果为false表示channel已经关闭 // if data, ok := <-c;ok { // fmt.Println(data) // }else { // break; // // } //} for data := range c { fmt.Println(data) } fmt.Println("main finished")}