Leave aside the extremely interesting engineer behind th go scheduler and goroutine.
The abstraction that goroutine provides is a simple, indipendent, isolated unit of execution.
You start it, and that is all you can do with it.
No way to set priorities, decided when to stop it or inspect it.
After the goroutine start the only interface that you get is a channel where to push and pop stuff from. Which is just too limited consider the complete lack of genetics.
I'm not sure how people can't see that futures (as in Java's CompletableFuture) is much superior to golang's approach exactly due to the reasons you mention.
You can also have the actor approach (e.g. Akka) to set priorities, have monitoring hierarchies, and introspection.
The abstraction that goroutine provides is a simple, indipendent, isolated unit of execution.
You start it, and that is all you can do with it.
No way to set priorities, decided when to stop it or inspect it.
After the goroutine start the only interface that you get is a channel where to push and pop stuff from. Which is just too limited consider the complete lack of genetics.
It is really the best we can come up with?