channel是go语言中的核心类型,正是因为channel的存在才使得golang不同于其它语言。channel使得并发编程变得简单容易有趣。这是我在学习channel时的学习记录。

先来看一段代码

package main
import(
    "fmt"
    "time"
)
var ch chan int  // 定义一个全局变量
func test(){
    ch <- 1
    fmt.Println("通过")
}
func main(){
    ch = make(chan int)
    go test()
    time.Sleep(1)
    fmt.Println("程序结束")
}

运行程序哦我们发现输出结束是

程序结束

因为在我们定义一个channel是用的是

make(chan int)

它等于

make(chan int,0)

也就是说它没有缓冲区,在运行test程序时,往channel里存入1,channel便阻塞了,导致无法输出。我们可以改写程序

make(chan int,1)

这样就是有缓冲区的channel,当有一个数据存放到这个channel中,channel未满,不会阻塞。程序便可以顺利执行。

其实他们并没有本质的区别,他们都属于channel,只不过存放空间大小的不同。在使用channel时可以根据自己所需的数据量来定义channel的空间。

标签: go, go语言, golang

添加新评论