#5.1 golang Определение собственных простых пользовательских типов данных, явное приведение типов

В Go можно определять собственные типы, основываясь на базовых примитивах.

Возможность определять пользовательские типы полезна, если необходимо моделировать какие-то сущности. В качестве примера создадим тип UserID:

package main

type UserID int

func main() {
   idx := 1
   var uid UserID = 42
   var int myID

   // даже если базовый тип одинаковый, разные типы несовместимы
   // cannot use uid (type UserID) as type int64 in assignment
   // uid := idx

   myID := UserID(idx) // нужно явное приведение

   println(uid, myID)
}

- т.е. в Го нет автоматического/неявного приведения типов.
Чтобы привести какую-то переменную базового типа к другому типу, который тоже основан на базовом типе, приходится делать это всегда явно.

В данном случае это типы совместимые. Используя имя типа и скобки, можно привести его к нужному UserID, так выше мы писали:

myID := UserID(idx) 

То есть idx будет типа int, а myID будет типа UserID.
Также можно конвертировать простые инты между собой, например:

type UserID int

func main() {
	idx := 1

	myID := UserID(idx) // int к пользовательскому типу
	idx = int(myID) // пользовательский тип к int

	fmt.Println(myID, idx)
}

-- похожее преобразование может быть для строки со слайсом байт.