Re:Data Race Patterns in Go
by fastest963 on Friday June 10, 2022 @07:00PM
(#31700298)
This is why all the examples call Store immediately with a zero value of the type.
[ Parent
| on HN ]
Re:Data Race Patterns in Go
by bumper_crop on Friday June 10, 2022 @07:22PM
(#31700441)
https://go.dev/play/p/xolc9oPwA0C
Interfaces don't have a zero type, which means that we can't have an atomic.Value which stores Shape. Atomic Value would be much easier to reason about if it had store semantics similar to a regular `var foo Shape = ...`. One of the other comment threads talked about generics helping this, so maybe there is hope.
Re:Data Race Patterns in Go
by yencabulator on Saturday June 11, 2022 @02:58PM
(#31707138)
Parent means
var bestShape atomic.Value
bestShape.Store((*Circle)(nil))Which will store it as a *Circle, and only allow more *Circles, not Shapes. That part of GP’s claim is correct.
It just had nothing to do with atomicity; it means something specific, not just “I like the failure mode.”
Re:Data Race Patterns in Go
by yencabulator on Sunday June 12, 2022 @11:36AM
(#31715293)
That's pretty easy to workaround:
type shapeContainer struct { Shape }
The usual way to use atomic.Value is by writing strongly-typed wrappers anyway, so that doesn't affect your codebase beyond about 3 lines.