1. package main
    2. import "fmt"
    3. func main() {
    4. //定义一个channel
    5. c := make(chan int)
    6. go func() {
    7. defer fmt.Println("defer结束")
    8. fmt.Println("goroutine正在运行")
    9. c <- 666 //将666发送给c
    10. }()
    11. num := <-c //从c中接受数据,并赋值给num
    12. fmt.Println(num)
    13. fmt.Println("goroutine结束")
    14. }
    1. package main
    2. import (
    3. "fmt"
    4. "time"
    5. )
    6. func main() {
    7. c := make(chan int,3)
    8. fmt.Println(len(c),cap(c)) //带有缓冲区的channel
    9. go func() {
    10. defer fmt.Println("子go结束")
    11. for i := 0; i < 3; i++ {
    12. c <- i
    13. fmt.Println(i,len(c),cap(c))
    14. }
    15. }()
    16. time.Sleep(time.Second)
    17. for i := 0; i < 3; i++ {
    18. num:= <-c
    19. fmt.Println(num)
    20. }
    21. fmt.Println("main结束")
    22. }
    1. package main
    2. import "fmt"
    3. func main() {
    4. c := make(chan int)
    5. go func() {
    6. for i := 0; i < 5; i++ {
    7. c <- i
    8. }
    9. //close可以关闭一个channel
    10. close(c)
    11. }()
    12. for {
    13. //ok如果为true表示channel没有关闭,如果为false表示channel已经关闭
    14. if data, ok := <-c;ok {
    15. fmt.Println(data)
    16. }else {
    17. break;
    18. }
    19. }
    20. fmt.Println("main finished")
    21. }
    1. package main
    2. import "fmt"
    3. func main() {
    4. c := make(chan int)
    5. go func() {
    6. for i := 0; i < 5; i++ {
    7. c <- i
    8. }
    9. //close可以关闭一个channel
    10. close(c)
    11. }()
    12. //for {
    13. // //ok如果为true表示channel没有关闭,如果为false表示channel已经关闭
    14. // if data, ok := <-c;ok {
    15. // fmt.Println(data)
    16. // }else {
    17. // break;
    18. //
    19. // }
    20. //}
    21. for data := range c {
    22. fmt.Println(data)
    23. }
    24. fmt.Println("main finished")
    25. }