News for hackers. Stuff that matters.
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.
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))
Re:Data Race Patterns in Go by morelisp on Saturday June 11, 2022 @05:24PM (#31708570)
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.