Я читал некоторый код 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 или значение функции, поскольку это все ссылочные типы, которые внутри содержат указатель (исключение было бы, если вы хотите, чтобы вызываемый, чтобы изменить заголовок ссылочного типа). Единственная причина, по которой я предоставил ее, - это полнота (то есть действительно обеспечить каждый способ передачи канала в качестве параметра и поставить вопрос, который, надеюсь, ссылается на все способы сделать это и сравнивает их).