// testchannel
package main

import (

  "fmt"

  "math/rand"

  "time"

)

func CalculateValue(values chan int) {

  // 设置随机种子,避免随机函数生成相同的值

  rand.Seed(time.Now().UnixNano())

  value := rand.Intn(100)

  fmt.Println("计算随机值: {}", value)

  // 往通道发送值

  values <- value

}

func main() {

  //建立一个通道,go进入通道产生一个随机数,然后返回来

  //通道满了会阻塞,空了会阻塞,不发送不接收,也会阻塞

  fmt.Println("Golang Channel 教程")

  // 创建int类型通道,只能传入int类型值

  values := make(chan int, 2)

  defer close(values)

  for i := 1; i < 5; i++ {

    go CalculateValue(values)

    // time.Sleep(1)

    // 从通道接收值

    value := <-values

    fmt.Println(value)

  }

}