Back before aliases defined types used to be called named types, which permitted the existence of unnamed types.
map[string]string is an unnamed type type Dictionary map[string]string is a named type, its name is Dictionary And the rules of assignment permitted assignment from or to an unnamed type. On Tuesday, 3 October 2017 06:26:44 UTC+11, Christian Surlykke wrote: > > Forgive me if this has been asked before. I've not been able to find a > diskussion about it. > > A snippet like this > > type AppleCount uint32 > > var i uint32 = 7 > var ac AppleCount = i > > > will fail to compile with an error like: > > cannot use i (type uint32) as type AppleCount in assignment > > > OTOH code like this: > > type Dictionary map[string]string > var m map[string]string = make(map[string]string) > var d Dictionary = m > > > compiles just fine. > > There is this about type definitions in The Go Programming Language > Specification: > > *A type definition creates a new, distinct type with the same underlying > type and operations as the given type, and binds an identifier to it.* > > TypeDef = identifier Type . > > *The new type is called a defined type. It is different from any other > type, including the type it is created from.* > > > which I would take to mean that the second snippet should be invalid. > > Is this a bug or 'working as intended'? If it's working as intended, can > anyone explain the reasoning behind this? > > br. Christian Surlykke > -- 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.