网站首页 返回列表 像“草根”一样,紧贴着地面,低调的存在,冬去春来,枯荣无恙。
golang 基础(23)channel
2020-06-10 02:47:52 admin 1820
golang_real.jpg
goroutine 也就是协程间通讯是通过 channel 来实现的,channel 将信息从一个 goroutine 传递到给另一个 gorout。
golang_channel.jpg
__
func main(){
messages := make(chan string)
go func(){messages <- "ping"}()
msg := <- messages
fmt.Println(msg)
}
这里大家可能会有些疑惑,不过我告诉大家其实 main 本身也是一个 goroutine 大家就明白这个例子了吧。定义 channel 很简单我们,
make(chan 传递数据类型)
__
messages := make(chan int8)
go func(){messages <- 30}()
当然也可以传递一些结构体作为传递信息的类型。
__
type Email struct{
title string
body string
}
func main(){
messages := make(chan Email)
aEmail := Email{
title:"angular",
body:"angular content",
}
go func(){messages <- aEmail
}()
msg := <- messages
fmt.Println(msg.title)
}
channel 有两种类型
- Unbuffered channel
- buffered channel
之前我们介绍实例中都使用的是 Unbuffered channel
在一个 unbuffered channel 上执行 send 操作会阻塞当前的 goroutine 直到另一个 goroutine 对
这个 channel 执行 receive 操作,此时发送的 value 通过 channel 进行传递,两个 goroutine
继续后续的执行。相反如果是 receive 操作先执行,则 receive 的 goroutine 阻塞直到有另一个 goroutine 对 channel
执行 send 操作。
__
func main() {
messages := make(chan string, 2)
messages <- "buffered"
messages <- "channel"
fmt.Println(<-messages)
fmt.Println(<-messages)
}
Golang_cyan.png
转载文章,原文链接:
golang 基础(23)channel
0 条评论 0 人参与