Probably i need to reveal the underlying problem i was trying to solve At a glande: an appoinment subsystem for a health *organization*, considering practitioners that work on *services *offering *practices *that refers to *billables *items, the *practices *may need one or more *equipment*, also taking into accountg the *practitioners* *availability* expressed in relative periodic terms (weekly for example) and absoulte terms (a given day on the cosmos) and their holidays, and the *location *where the patient-doctor encounter will occur, also consdiering the *center *(a heath *organization *has one or many) holidays.
So need to resolve availabiltiies to determine when a given practice can be performe. I have several structs represeting the entties involved in the process (the one marked in *bold*), for each one of these structs there is a *theorical availbility* and a *actual usage* that leads you to calculate the *actual availlity*, so *everything related to the availabilty of these enties need to be placed somewhere*, so my original idea was to associate each algoritm with the struct but without writing the algorithms as part of the struct, a map comes in handy here. El sáb., 26 ene. 2019 a las 16:31, Wagner Riffel (<wgrrif...@gmail.com>) escribió: > i don't quite understand why you're using enums as keys, you can use a > anything but what already was pointed out, following your person example: > https://play.golang.org/p/cuMlPeqR7Qb > > > On Sat, Jan 26, 2019, 3:26 PM Victor Giordano <vitucho3...@gmail.com> > wrote: > >> Yup! That's right! At the end of the day i used the enums idioms >> <https://stackoverflow.com/questions/14426366/what-is-an-idiomatic-way-of-representing-enums-in-go>, >> employing integer type (the value that supports the "enum" ) >> >> (TL;DR;) Ancient History : >> >> The problem arises as i get used to use maps in Java where you can use as >> a key a class definition (that is custom data type in Java, like the same >> way an "struct" in Golang is a custom data type). So i get use to work with >> types as keys, that way i could associate logic and data with an >> asbtraction (recall that logic and data does not intrinsically belong to >> that abstraction, so it would be wrong to place all in there). >> >> I wake-up in golang without that capability: i mean how i may refer to a >> group of well know struct definitions in a generic way, i mean for example >> this: >> >> type Person struct { >> } >> >> var SpanishTermByStruct map[struct]string = map[struct]string{ >> Person: "person", >> } >> >> ? and in that moment the wondering about using "type" for key (or value) >> comes to my mind... i then i get that is not allowed. >> >> >> El sáb., 26 ene. 2019 a las 10:57, <mountain...@gmail.com> escribió: >> >>> 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 a topic in the >>> Google Groups "golang-nuts" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/golang-nuts/Z0XQueZFoVw/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> golang-nuts+unsubscr...@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. >> > -- 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.