and*_*ewz 2 concurrency channel go
我是 Golang 的新手,我可以像这样调整缓冲通道的大小:
var xxx // just declaration.
...
xxx = make(chan string, mysize) // I know `xxx := make(chan string, mysize)` work, but I don't want it.
...
xxx <- "123" // using the buffered channel.
Run Code Online (Sandbox Code Playgroud)
通道创建后,其容量(缓冲区大小)将无法更改。您只能创建和分配不同容量的新频道。
请注意,仅声明通道类型的变量不会创建和初始化通道,它将是通道类型的零值nil:
var xxx chan int
Run Code Online (Sandbox Code Playgroud)
这xxx是一个 的变量chan int,但它尚未初始化,您无法在其上发送任何值。您必须使用内置make()函数创建一个,例如:
var xxx chan int = make(chan int, 10)
Run Code Online (Sandbox Code Playgroud)
或者干脆:
var xxx = make(chan int, 10)
Run Code Online (Sandbox Code Playgroud)
它的容量将是10并且不能改变。但是,您可以为其分配一个新的通道值,例如:
xxx = make(chan int, 20)
Run Code Online (Sandbox Code Playgroud)
但是要知道,如果多个 goroutine 访问和使用该xxx变量,上述操作可能会导致数据竞争,并且更改 的值xxx应该与读取它的其他 goroutine 同步。
还要注意,如果 goroutines 不访问xxx但通道被“传递”给它们,那么分配一个新的通道值xxx不会影响它们,这些 goroutines 将不知道新通道并且将继续使用旧的、传递的通道。
| 归档时间: |
|
| 查看次数: |
697 次 |
| 最近记录: |