A channel is a simple abstraction around a giant mutex. It does not scale throughput very well and has terrible latency performance to boot.
Something like the disruptor (https://lmax-exchange.github.io/disruptor/) is more along the lines of what I was thinking of. Without generics support you have to write it over and over again for each use case.
A go channels implemented using a mutex? I would be surprised if that was the case (but it might be). I would imagine such a fundamental construct built into the language would be lock-free.
That's called a channel in Go.