I may be a bit confused because I adopted a language that uses concurrent sequential processes - atomic FIFO queues and coroutines, to me, mutating variables is not the problem, it's when two threads mutate the same variable or one mutates one reads and the program will panic or behave unpredictably. In this paradigm we accept that it's often better to pass by reference but that it's never ok for two threads or more to handle a mutable value. (in Go, only strings are immutable).