Is the tl;dr: instead of channels, just use mutexes (and a shared state) explicitly with goroutines?
Use the one that fits your problem https://go.dev/wiki/MutexOrChannel
But in any case you will end up using a wrapper on either
So akin to Erlang processes.