Use Type Aliases only during code base refactoring to move types between packages. Codebase Refactoring (with help from Go)
Use Type Declaration to create enums and to add extra behaviour to basic types.
Create new type with limited value range. It makes code more readable and safe:
type Vehicle intconst (Bike Vehicle = iotaScooterCarBusTrain)
Create new type to add extra behaviour. I would always question the need for this.
type Person stringfunc (p Person) Hello(anotherPerson Person) {fmt.Printf("%s, Hello from %s", anotherPerson, p)}elon := Person("Elon Musk")aleh := Person("Aleh")elon.Hello(aleh) // Aleh, Hello from Elon Musk