The beauty of Go's channel design approach is how it isolates responsibilities. It's not just about synchronization. A great example is Rob Pike's lexer.
When passing singletons around, you are communicating with shared state. Sometimes, there is no way around it.
When passing singletons around, you are communicating with shared state. Sometimes, there is no way around it.