On Tue, Jun 8, 2021 at 1:26 AM Robert Engels <reng...@ix.netcom.com> wrote:

> The pattern of a background stats collector is a common one. The atomic is
> required not optional.
>

It might be a common pattern, but it uses a pointer-receiver in that case.
The atomic operation is not required, it operates on a local variable.
Again, I don't understand how you can make statements that are so clearly
wrong.

Feel free to try running it in the race detector without an atomic
operation. Feel free trying to get the race detector to trigger without the
atomic access, but keeping it silent when you add it. You'll find that this
needs a pointer receiver. Because otherwise the function is operating on a
local variable.


>
> On Jun 7, 2021, at 6:16 PM, 'Axel Wagner' via golang-nuts <
> golang-nuts@googlegroups.com> wrote:
>
> 
> BTW, just to nail down the point of that code being wrong without
> interfaces: Your usage of `atomic` in `Log` is superfluous. You are
> operating on a local variable, so there is no possibility of concurrent
> modification. Your code is equivalent to this:
> https://play.golang.org/p/zYG0zTsk-2a
> The only reason to use `atomic` here (and why you used it) is if that
> memory could be shared between goroutines. For that to happen, you need a
> pointer receiver though.
>
> I refuse to believe that interfaces have anything to do with this
> obfuscation here. There is more than enough indication of it being wrong in
> any case.
>
> On Tue, Jun 8, 2021 at 1:05 AM Axel Wagner <axel.wagner...@googlemail.com>
> wrote:
>
>> On Mon, Jun 7, 2021 at 11:42 PM Robert Engels <reng...@ix.netcom.com>
>> wrote:
>>
>>> I don’t think that represents the problem fairly. In the non interface
>>> case I know I can’t accept a copy so I would declare the method as taking a
>>> pointer to the struct.
>>>
>>
>> How methods are declared should, in general, not be a matter of whether
>> or not they are assigned to an interface, but to whether or not they need a
>> pointer. Again: Your code is incorrect without interfaces
>> <https://play.golang.org/p/WpIzYYLOKn->. The problem doesn't happen when
>> you put that value into an interface - it happens when you pass a copy of
>> it and expect it to refer to the original. Interfaces are just one way to
>> create such a copy, but they do not matter for the correctness of this code
>> and for whether or not that method needs a pointer receiver (it does).
>>
>> But again, to be clear: I'm not saying problems like this *never* happen
>> and I'm not even saying that interfaces may obscure it in some cases. Just
>> that a) the root cause here is that your method really needs to take a
>> pointer-receiver, interfaces or not and b) that it seems very much an
>> overstatement to me to call this "the most inconsistent and obtuse aspect
>> of the Go language".
>>
>> With interfaces this is lost - as the interface is implicitly a pointer
>>>
>>
>> Well, it seems a bad idea to say that interfaces are implicitly pointers
>> then. That seems to indicate that Rob's original phrasing is indeed an
>> important clarification - the language behaves as if the value contained in
>> them is copied when the interface value is copied.
>>
>> It seems the confusion here is, that you assume it's not. And that
>> interfaces act as a pointers, when they don't.
>>
> --
> 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/CAEkBMfGVyvYYpQhCp_JkxN9EvgZ4FXJ8_WpxseJOB1OR7qt6ww%40mail.gmail.com
> <https://groups.google.com/d/msgid/golang-nuts/CAEkBMfGVyvYYpQhCp_JkxN9EvgZ4FXJ8_WpxseJOB1OR7qt6ww%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
>

-- 
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/CAEkBMfHibUpDHQU9m8%3DrLYtnDj%3DFY01nkuP4k0Giow-hCbhNgQ%40mail.gmail.com.

Reply via email to