当我将一个通道作为参数传递给函数末尾时关闭它时,我不需要在它之前放*来引用主函数范围中的通道。但是,当我想设置一个WaitGroup(wg.Done())时,我必须这样做,为什么会这样?
答案 0 :(得分:2)
那是因为在内部,chan
有点是由指针构成的结构。您不需要发送指针。相反,sync.WaitGroup
是一个经典的结构
type WaitGroup struct {
state1 [12]byte
sema uint32
}
对于其所有方法都使用指针接收器声明,因此您需要传递指向它的指针以在不同的范围内使用它。
答案 1 :(得分:0)
在Go中,chan
是一种语言原语,sync.WaitGroup
是一个结构。因为Go按值传递参数,WaitGroup
将作为副本传递,chan
将像interface
一样传递, <div style="position: relative; top: 40px; width:50%">
<table id="list"><tr><td></td></tr></table>
<div id="pager"></div>
</div>
<div style="position: relative; top: -250px; left:50%;">
<table id="list1"><tr><td></td></tr></table>
<div id="pager1"></div>
</div>
实现为基本类型,元数据包括指向实施细节。