c语言编程笔录

首页 >   > 笔记大全

笔记大全

go语言中make+chanint,1+和make+chanint+的区别是什么

更新时间:2024-01-08

前言

在Go语言中,make函数用于创建一个内置类型(如slice、map和channel)的对象。在本问题中,我们需要比较make+chan int, 1和make+chan int+的区别。

解析

1. make+chan int:

// 创建一个缓冲容量为1的int类型的无缓冲channel
ch := make(chan int)

这行代码创建了一个类型为int的无缓冲channel,即该channel没有缓冲区。当发送操作(ch <- value)执行时,发送方将会阻塞直到接收方取出该值。同样,当接收操作(<-ch)执行时,接收方将会阻塞直到有发送方发送值过来。

2. make+chan int+:

// 创建一个缓冲容量为0的int类型的有缓冲channel
ch := make(chan int, 0)

这行代码创建了一个类型为int的有缓冲channel,缓冲区大小为0。在这种情况下,发送方会阻塞直到接收方接收值。因为缓冲区大小为0,所以只有在有接收方的情况下才能进行发送操作。

3. make+chan int, 1:

// 创建一个缓冲容量为1的int类型的有缓冲channel
ch := make(chan int, 1)

这行代码创建了一个类型为int的有缓冲channel,缓冲区大小为1。在这种情况下,发送方不会立即阻塞,除非缓冲区已满。当缓冲区已满时,发送方才会阻塞,直到有接收方取出一个值。

总结

所以,我们可以通过make函数的不同参数来创建不同类型的channel。make+chan int创建了一个无缓冲channel,make+chan int+创建了一个缓冲区大小为0的channel,而make+chan int, 1创建了一个缓冲区大小为1的channel。