> This works in general, but your example is flawed.

oh, my bad, thanks for the clarification

> you'll receive a runtime panic instead of a compile error.

yeah, I've received the same feedback offline from one colleague some 
minutes ago ... it is a bad idea

Thanks

On Wednesday, 31 August 2022 at 16:23:57 UTC+2 bse...@computer.org wrote:

> On Wed, Aug 31, 2022 at 7:28 AM antonio.o...@gmail.com <
> antonio.o...@gmail.com> wrote:
>
>> Hi,
>>
>> Based on the documentation:
>>
>> "The map key can be any type that is comparable."
>> "Struct values are comparable if all their fields are comparable. Two 
>> struct values are equal if their corresponding non-blank fields are equal."
>> "Interface values are comparable. Two interface values are equal if they 
>> have identical dynamic types and equal dynamic values or if both have value 
>> nil."
>>
>> My understanding is that I can use an structure like this as a key for a 
>> map
>>
>> type dialer interface {
>>     dial()
>> }
>>
>> type key struct {
>>     id     string
>>     number int
>>     dialer      dialer
>> }
>>
>> It also seems to work fine https://go.dev/play/p/hKQfx-JH5WP
>>
>
> This works in general, but your example is flawed. In your example, you 
> have
>
> f1 := &fakedialer{}
> f2 := &fakedialer2{}
>
> and then use f1 anf f2 as keys. These are pointers to structs, so the 
> comparison will be pointer comparison, not field-by-field comparison. 
>
> If you do:
>
> f1 := fakedialer{}
> f2 := fakedialer2{}
>
> and replace the pointer receivers with value receivers, and then use these 
> as map keys, it will work. But this time, if you pass a struct that cannot 
> be used as a key, you'll receive a runtime panic instead of a compile error.
>  
>
>> But I'm wondering if I'm missing something or are there some corner cases 
>> I should take into account before doing this ...  or if this is not 
>> recommended at all
>>
>> Thanks,
>>
>> -- 
>> 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...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/97b7368e-d276-40ab-afa3-f8a7868fd9ean%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/97b7368e-d276-40ab-afa3-f8a7868fd9ean%40googlegroups.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/92b3ba9a-99bf-45b4-a697-a61de3ab8717n%40googlegroups.com.

Reply via email to