3 ms·
Given that there is no way to make a non-pointer map in Go, there is no workaround for the example they gave. The broader point is that there is no way in Go t
by simiones 6y ago
Given that there is no way to make a non-pointer map in Go, there is no workaround for the example they gave.
The broader point is that there is no way in Go to ensure that data passed over a channel will not be modified concurrently without modifying the type of the data specifically for the channel use case.
A deep_copy() primitive would fix this.
- bankisan 6y agoRight, but they mentioned sending immutable structs which is why I gave the struct example. But you're right that every declared map is a just a pointer. With respect to your second point, I see what you mean but I still don't think that's a negative of Go. You can pass in copied values without having to have a deep_copy() primitive (loop map values and copy to new map, dereferencing a pointer, etc.). Like other parts of Go, if you want to make your data immutable there is no syntactic sugar. You have to explicitly write it out.
- eru 6y agoYou'd have to roll your own deep_copy by hand (or code generation) for every single data type.
- simiones 6y ago> With respect to your second point, I see what you mean but I still don't think that's a negative of Go. It is a negative of Go, because Go pushes you into the pit of failure by its design: it is much, much harder to do the right thing (send deep copies of objects over channels) than it is to do the wrong things (send pointers or shallow copies over channels).
- eru 6y agoYes, either a deep_copy() or a way to declare things immutable. (Or both.)