int64
is a named type, []byte
is an unamed type.
Named types are specified by a (possibly qualified) type name; unnamed types are specified using a type literal, which composes a new type from existing types - golang spec
Also
Two named types are identical if their type names originate in the same TypeSpec. A named and an unnamed type are always different. Two unnamed types are identical if the corresponding type literals are identical, that is, if they have the same literal structure and corresponding components have identical types. - golang spec
Therefore
type MyByteArray []byte
type MyInt int
var a MyByteArray
var b []byte
a = b // legal because array is unnamed - their corresponding type literals are identical
var x MyInt
var y int
x = y // illegal because int is named - they don't originate in the same type spec
Also see Why can I type alias functions and use them without casting?