AFAICT, a more go-like approach would be to use std::fs inside a std::thread
And of course there is a huge amount of abstraction to build this up. It's just all hidden in the language runtime, so people can say with a straight face that there is "no abstraction and no cruft."