This is typical of the bugs you have to worry about when working with a language that favors mutability.<p>With immutables you simply map on players list and continue working with the copy.<p>Bugs avoided. Performance concerns - maybe they exist - but show me them first.
This is not really a bug -- it's a natural consequence of supporting value semantics.<p>The Go code<p><pre><code> var player Player
otherPlayer := player
otherPlayer.score = 0
</code></pre>
has the exact same "bug."<p>This isn't something that should be fixed by the language. Instead, a linter rule that detects that the write is never read would catch this.
Not a bug but a feature.<p>Go favors concurrency safety and concurrency efficiency. Therefore it has to copy loop values to be able to parallelize them. With a reference this would be unsafe to do.