I looked at your program example, mainly using the reflection type to 
design the mapped key, perhaps the reflected key is a comparable type, but 
I mainly propose specific types, such as func, slice, map can not be used 
as a key use

在 2019年1月25日星期五 UTC+8下午11:31:57,Victor Giordano写道:
>
> Yeah, i got the idea. I had already researched about it and what you can 
> do about it. 
> <https://stackoverflow.com/questions/50730331/mapping-concrete-types>
> I was only repeating what i want as a dev in this community! 
>
> El viernes, 25 de enero de 2019, 12:04:38 (UTC-3), Wagner Riffel escribió:
>>
>> you can "employ" any custom type as key but the ones that doesn't 
>> defines equality operations, see 
>> https://golang.org/ref/spec#Comparison_operators 
>> as Ian already pointed out, you just can't build your custom type on 
>> top of func, map or slice to be a valid key, anything else you can. 
>>
>> On Fri, Jan 25, 2019 at 12:47 PM Victor Giordano <vituc...@gmail.com> 
>> wrote: 
>> > 
>> > Just wanna say : It would be nice to employ a custom type as a valid 
>> key for a map!!! :D 
>> > 
>> > 
>> > El jueves, 24 de enero de 2019, 0:47:32 (UTC-3), mount...@gmail.com 
>> escribió: 
>> >> 
>> >> thanks lan. 
>> >> 
>> >> 在 2019年1月23日星期三 UTC+8下午11:26:57,Ian Lance Taylor写道: 
>> >>> 
>> >>> On Tue, Jan 22, 2019 at 11:47 PM <mount...@gmail.com> wrote: 
>> >>> > 
>> >>> > i got : 
>> >>> >   # command-line-arguments 
>> >>> > ./key.go:6:18: invalid operation: F() == F() (func can only be 
>> compared to nil) 
>> >>> 
>> >>> Yes, that is what the language spec says and it is what I said: in 
>> Go, 
>> >>> function values are not comparable. 
>> >>> 
>> >>> I wrote that code as an example to help explain why function values 
>> >>> are not comparable. 
>> >>> 
>> >>> Ian 
>> >>> 
>> >>> > 在 2019年1月23日星期三 UTC+8上午11:59:07,mount...@gmail.com写道: 
>> >>> >> 
>> >>> >>      When i use the func, map slice as the key of map, it isn't 
>> work! 
>> >>> >>      So  I lookup source  why, i find 
>> >>> >> 
>> >>> >>     // spec: "The comparison operators == and != must be fully 
>> defined 
>> >>> >>         // for operands of the key type; thus the key type must 
>> not be a 
>> >>> >>         // function, map, or slice." 
>> >>> >>         // 
>> >>> >>         // Delay this check because it requires fully setup types; 
>> >>> >>         // it is safe to continue in any case (was issue 6667). 
>> >>> >>         check.later(func() { 
>> >>> >>             if !Comparable(typ.key) { 
>> >>> >>                 check.errorf(e.Key.Pos(), "invalid map key type 
>> %s", typ.key) 
>> >>> >>             } 
>> >>> >>         }) 
>> >>> >> // Comparable reports whether values of type T are comparable. 
>> >>> >> func Comparable(T Type) bool { 
>> >>> >>     switch t := T.Underlying().(type) { 
>> >>> >>     case *Basic: 
>> >>> >>         // assume invalid types to be comparable 
>> >>> >>         // to avoid follow-up errors 
>> >>> >>         return t.kind != UntypedNil 
>> >>> >>     case *Pointer, *Interface, *Chan: 
>> >>> >>         return true 
>> >>> >>     case *Struct: 
>> >>> >>         for _, f := range t.fields { 
>> >>> >>             if !Comparable(f.typ) { 
>> >>> >>                 return false 
>> >>> >>             } 
>> >>> >>         } 
>> >>> >>         return true 
>> >>> >>     case *Array: 
>> >>> >>         return Comparable(t.elem) 
>> >>> >>     } 
>> >>> >>     return false 
>> >>> >> } 
>> >>> > 
>> >>> > -- 
>> >>> > 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. 
>> >>> > For more options, visit https://groups.google.com/d/optout. 
>> > 
>> > -- 
>> > 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. 
>> > For more options, visit https://groups.google.com/d/optout. 
>>
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to