Erlang's style per-process garbage collection requires (or at least favors) passing messages by value between processes.
Both Go and Rust - being relatively low level - prefer passing pointers (references) rather than the data itself. This requires a shared GC heap.
No free lunch...