Go 通道作为参数,为什么不使用星号?
当我在函数末尾传递一个通道作为参数来关闭它时,我不需要在它前面加*来引用主函数作用域中的通道。但是当我要将WaitGroup设置为done(wg.done())时,我必须这样做,这是为什么呢?在Go中,Go 通道作为参数,为什么不使用星号?,go,Go,当我在函数末尾传递一个通道作为参数来关闭它时,我不需要在它前面加*来引用主函数作用域中的通道。但是当我要将WaitGroup设置为done(wg.done())时,我必须这样做,这是为什么呢?在Go中,chan是一个语言原语,sync.WaitGroup是一个结构。由于Go通过值传递参数,WaitGroup将作为副本传递,而chan将作为接口传递,该接口被实现为原语类型,元数据包括指向实现细节的指针。在Go中,chan是一种语言原语,而sync.WaitGroup是一个结构。由于Go通过值传递参
chan
是一个语言原语,sync.WaitGroup
是一个结构。由于Go通过值传递参数,WaitGroup
将作为副本传递,而chan
将作为接口
传递,该接口被实现为原语类型,元数据包括指向实现细节的指针。在Go中,chan
是一种语言原语,而sync.WaitGroup
是一个结构。由于Go通过值传递参数,WaitGroup
将作为副本传递,而chan
将作为接口
传递,该接口被实现为原始类型,元数据包括指向实现细节的指针。这是因为在内部,chan
在某种程度上是由指针组成的结构。您不需要发送指向它的指针。相反,sync.WaitGroup
是一个经典的结构
type WaitGroup struct {
state1 [12]byte
sema uint32
}
对于其所有方法都是用指针接收器声明的,因此您需要向其传递指针以在不同的范围内使用它。这是因为在内部,
chan
多少是由指针组成的结构。您不需要发送指向它的指针。相反,sync.WaitGroup
是一个经典的结构
type WaitGroup struct {
state1 [12]byte
sema uint32
}
对于其所有方法都是用指针接收器声明的,因此您需要向其传递一个指针,以便在不同的范围内使用它