channel2.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. // Конал создан, но не инициализирован (print вернет nil)
  7. /*
  8. var c chan int
  9. fmt.Println(c)
  10. */
  11. // канал - это указатель
  12. /*
  13. c := make(chan int, 1)
  14. fmt.Printf("type of `c` is %T\n", c)
  15. fmt.Printf("value of `c` is %v\n", c)
  16. go channelReadWrite(c)
  17. time.Sleep(1 * time.Second)
  18. */
  19. /*
  20. fmt.Println("main() started")
  21. c := make(chan string)
  22. go greet(c)
  23. c <- "hello"
  24. fmt.Println("main() stopped")
  25. */
  26. // /*
  27. c := make(chan int)
  28. // Здесь будет блокировка горутина main() заблокируется
  29. // до тех пор пока не будут считаны данные из канала
  30. c <- 1
  31. go channelRead(c)
  32. // А так сработает
  33. // c <- 1
  34. // */
  35. // time.Sleep(1 * time.Second)
  36. }
  37. func greet(c chan string) {
  38. fmt.Println(<-c)
  39. }
  40. func channelReadWrite(c chan int) {
  41. var data int
  42. c <- 77
  43. data = <-c
  44. fmt.Println(data)
  45. }
  46. func channelRead(c chan int) {
  47. fmt.Println(<-c)
  48. }