From Go Faq.
In Go, types are closely tied to methods, in that every named type has a (possibly empty) method set. The general rule is that you can change the name of the type being converted (and thus possibly change its method set) but you can’t change the name (and method set) of elements of a composite type. Go requires you to be explicit about type conversions.
What difference does it make with explicit conversion on single vs composite element.
type T1 int type T2 int var t1 T1 var x = T2(t1) // OK var st1 T1 var sx = (T2)(st1) // NOT OK