代码:
/*目标:构建一个通道,作为两个函数的参数,并发执行,在通道中写入数据并读取数据*/
package main
import(
"fmt"
"time"
)
func gorout1(ch chan string){
ch <- "我是通道1"
}
func gorout2(ch chan string){
a := <- ch
fmt.Println(a)
}
/*main函数中调用*/
func main(){
ch := make(chan string)
go gorout1(ch)
go gorout2(ch)
time.Sleep(2 * time.Second)
}
输出:
我是通道1
说明:
通道是一种特殊的数据结构,用于并发编程中两个goroutine对象之间的通信。
按照通道缓冲类型分类,通道分为无缓冲通道和带缓冲通道。无缓冲通道不存储数据。带缓冲通道需要设置通道元素数量,用于存储数据,不强制要求必须同时写入和获取,但是当通道中没有数据或者当通道中没有可以用的空间用于存储数据时候会发生阻塞。
通道可设置为单向通道和双向通道,单向通道不灵活且应用场景较少。