I've enjoyed working with core.async once I understood these constraints. It would be nice for code to "know" whether it's within a go block or not. That would alleviate needing do-something! and do-something!! versions of some functions.
By "know" I mean something like an in-go earmuff var.
EDITED for clarification and formatting