The large part of their “complicated” appearance i...
# coroutines
e
The large part of their “complicated” appearance is that there are not many established coroutine-based concurrency/architecture patterns beyond Go community yet. The other part was nailed by @minivac. Let me rephrase it: writing asynchronous code is still harder than synchronous, even if you have coroutines that make it appear synchronous. Coroutines only help you with some aspects of asyncronity (clean representation of step-by-step async operations, loops, error handling), but they don’t remove or make simpler the very asynchronous nature itself.