Преобразование именованных типов

В Go именованные типы (например, тип MyInt, объявленный как type MyInt int) не являются взаимозаменяемыми со своим базовым типом, даже если их структура совпадает. Для преобразования между ними используется синтаксис явного приведения: имя типа используется как функция, принимающая значение базового типа. В результате получается значение нового именованного типа с тем же содержимым.

Синтаксис

goMyType(value)

Пример

Преобразуем значение базового типа int в именованный тип MyInt:

gopackage main

import "fmt"

type MyInt int

func main() {
  var base int = 42
  var named MyInt = MyInt(base)

  fmt.Println(base)
  fmt.Println(named)
}

Результат выполнения кода:

go42
42

Пример

Преобразование в обратную сторону — из именованного типа в базовый:

gopackage main

import "fmt"

type MyString string

func main() {
  var named MyString = "abcde"
  var base string = string(named)

  fmt.Println(named)
  fmt.Println(base)
}

Результат выполнения кода:

go"abcde"
"abcde"

Пример

Преобразование между двумя разными именованными типами с одинаковым базовым типом выполняется через промежуточное приведение к базовому типу:

gopackage main

import "fmt"

type FirstInt int
type SecondInt int

func main() {
  var first FirstInt = 100
  var second SecondInt = SecondInt(first)

  fmt.Println(first)
  fmt.Println(second)
}

Результат выполнения кода:

go100
100

Смотрите также

  • приведение к неявным типам,
    которое происходит автоматически для совместимых типов
  • операцию преобразования указателей,
    которая используется для работы с адресами памяти
  • функцию to-int64,
    которая преобразует значение к 64-битному целому числу
  • функцию to-float64,
    которая преобразует значение к 64-битному числу с плавающей точкой