xingyu655 发表于 2018-9-20 11:15:03

golang的Channel

golang的Channel
  Channel 是 golang 一个非常重要的概念,如果你是刚开始使用 golang 的开发者,你可能还没有真正接触这一概念,本篇我们将分析 golang 的Channel

1. 引入
  要讲 Channel 就避不开 Goroutine -- 协程。闲话不说, 直接上个例子
  Goroutine demo:
  

package main  

  
import (
  "fmt"
  "time"
  
)
  

  
func main() {
  origin := 1
  go doSomeCompute(origin)
  time.Sleep(5 * time.Second)
  
}
  

  
func doSomeCompute(num int) {
  result := num * 2
  fmt.Println(result)
  return
  
}
  

  简单来说,例子中有一个 main 的协程,一个 doSomeCompute 的协程。还有个延时退出的方法等待计算协程计算结果。我们尝试思考这个例子的一些问题:
  a. 如何获取 doSomeCompute 的计算结果?
  b. 如何获取 doSomeCompute 的执行状态,当前是执行完了还是执行中?
  如何解决这种问题呢?
  Channel!

2. Channel
  Channel怎么处理上面的问题?我们直接上代码:
  举例
  

package main  

  
import (
  "fmt"
  
)
  

  
func main() {
  origin := 1
  //一个无缓冲Channel
  res := make(chan int)
  go doSomeCompute(origin, res)
  fmt.Println(
页: [1]
查看完整版本: golang的Channel