#5.1 golang Определение собственных простых пользовательских типов данных, явное приведение типов
Primary tabs
Forums:
В 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)
}
-- похожее преобразование может быть для строки со слайсом байт.
- Log in to post comments
- 29 reads