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.

Reply via email to