>Why has Rust struggled so much with this, where Go has succeeded from the start with its language-level “goroutine” concept and runtime?
Rust made the deliberate decision to avoid the heavier Go goroutines runtime model after early alpha/beta experiments showed it conflicted with Rust's low-level design. I found 3 links to some history of that rationale in a previous comment: