golang的Channel
golang的ChannelChannel 是 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]