我正在阅读一些 go 代码并说了几种不同的方式来传递 go 通道。也许它们是相同的,但我想知道是否有任何区别,因为我无法在网上找到文档:
1)
func serve(ch <-chan interface{}){ //do stuff }
2)
func serve(ch chan<- interface{}){ //do stuff }
3)
func serve(ch chan interface{}){ //do stuff }
4)
func server(ch *chan interface{}){ //do stuff}
我想知道它们之间的区别是什么,以及它们是否只是做同一件事的等效方法:围绕不同的 goroutines 传递一个通道。
注意:我知道没有理由将指针传递给 chan、map、slice 或函数值,因为这些都是内部包含指针的引用类型(如果您希望被调用者更改,则例外引用类型标头)。我提供它的唯一原因是为了完整性(即真正提供可以尝试将通道作为参数传递的所有方式,并希望提出问题,引用所有方式来执行此操作并进行比较)。
原文由 Charlie Parker 发布,翻译遵循 CC BY-SA 4.0 许可协议
这些是不同 类型 的渠道。请参阅 http://golang.org/ref/spec#Channel_types 。对于指针的东西:不常见,但如果您想从函数内部更改通道(在野外从未见过),可能会有用。