通道作为参数,为什么不是星号?

时间:2016-04-05 15:55:03

标签: go

当我将一个通道作为参数传递给函数末尾时关闭它时,我不需要在它之前放*来引用主函数范围中的通道。但是,当我想设置一个WaitGroup(wg.Done())时,我必须这样做,为什么会这样?

2 个答案:

答案 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> 实现为基本类型,元数据包括指向实施细节。