package main
import "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 main
import (
"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 main
import "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 main
import "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")
}