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.