I believe your code is broken. You need to use a lock when checking and making the switch (see double locking problem) or there would be no need to use atomics.
If you run it under the race detector I am guessing it will fail. > On Nov 16, 2021, at 6:25 AM, Stephen Illingworth > <stephen.illingwo...@gmail.com> wrote: > > > When using atomic.Values it is important that the type being stored is > consistent. Trying to store a different type in an atomic.Value will cause a > panic > > panic: sync/atomic: store of inconsistently typed value into Value > > I've found that the way around this is to create a new instance of > atomic.Value whenever I have reason to believe that the type to be stored has > changed. In my program this can happen because I am storing an interface in > the atomic.Value and the implementation of the interface may change. > > Choosing the moment to create the new atomic.Value however can be tricky so I > am now trying the following method: > > 1) Check the type of the existing stored value and the type of the new value > 2) If they are the same then atomic.Value.Store() can be used > 3) If they are not the same, then create a new instance of atomic.Value and > store new value in that > 4) Give the new atomic.Value the name of the old atomic.Value > > This method means I no longer have to worry about when I create a new > instance of atomic.Value - the new instance is created when the type check > fails. > > Example code. > > https://play.golang.org/p/1gmI5eMdOcl > > Now, this obviously requires knowledge of how interface{} is represented > internally, which isn't great, but in principle is this a correctly working > solution? (It seems to be to me but that doesn't really mean anything) > > Does returning an atomic.Value from a function count as "copying" after first > use? > > Is this going to bite me in the future? > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/8893475a-ec61-4f78-9dc0-b80dda9e675an%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/3B7F9D8A-7C7F-43BD-93A9-60A9BE9A2E27%40ix.netcom.com.