gpt4 book ai didi

go - 为什么在等待完成时使用 `chan struct{}` 而不是 `chan interface{}`?

转载 作者:IT王子 更新时间:2023-10-29 02:25:19 26 4
gpt4 key购买 nike

在golang中,当我们需要等待某事完成时,我们会使用一个channel。

例子:

done := make(chan struct{})
go func() {
// ...
close(done)
}()
<-done

但是,换句话说,chan interface{} 也适用于这种情况。

那么,chan struct{}chan interface{} 有什么区别?

例子2:

done := make(chan struct{})
go func() {
// ...
done <- struct{}{}
}()
<- done

在其他情况下,如果不关闭 goroutine 中的 channel 而不是向其发送对象。

会在 goroutine 中创建一个对象,但如果使用 chan 接口(interface){},可以将 nil 对象发送到 channel 。

使用 chan struct{} 更好吗?

最佳答案

在您的“完成” channel 示例中,从功能上讲, channel 实际上可以是任何类型,因为实际上没有发送数据,并且 channel 仅用作信号机制。但为了内存利用率,struct{}是 Go 中可用的最小数据类型,因为它几乎不包含任何内容,因此不需要分配,这就是为什么它通常用于此类场景。

关于go - 为什么在等待完成时使用 `chan struct{}` 而不是 `chan interface{}`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52035390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com