Golang Channel 详细原理和使用技巧
// 创建一个有缓冲的channel
bufferedChan := make(chan int, 3) // 缓冲大小为3
// 向channel中放入数据
bufferedChan <- 1
bufferedChan <- 2
bufferedChan <- 3
// 从channel中取出数据
fmt.Println(<-bufferedChan)
fmt.Println(<-bufferedChan)
fmt.Println(<-bufferedChan)
// 创建一个无缓冲的channel
unbufferedChan := make(chan int)
// 使用goroutine模拟并发
go func() {
unbufferedChan <- 1
}()
// 从无缓冲的channel中取数据会阻塞,直到有goroutine向其发送数据
fmt.Println(<-unbufferedChan)
这段代码展示了如何在Go语言中创建和使用带缓冲和不带缓冲的channel。带缓冲的channel可以存储一定数量的值,而不带缓冲的channel在尝试发送数据之前必须有接收方准备好。通过使用goroutine,我们可以模拟并发的行为,展示了channel在同步多个goroutine中的作用。
评论已关闭