РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
104 of 1593 menu

Неявное преобразование типов

В языке Go отсутствует неявное преобразование типов (implicit type conversion) в том виде, в котором оно присутствует во многих других языках программирования. Это означает, что вы не можете просто так присвоить значение одного типа переменной другого типа или использовать значения разных типов в одной операции без явного приведения. Однако существуют отдельные случаи, где неявное преобразование все же происходит.

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

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

package main import "fmt" func main() { var x int32 = 10 var y int64 = x // Ошибка компиляции fmt.Println(y) }

Для корректной работы необходимо выполнить явное преобразование:

package main import "fmt" func main() { var x int32 = 10 var y int64 = int64(x) fmt.Println(y) }

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

10

Преобразование между целочисленными и числами с плавающей точкой

Аналогичным образом требуется явное преобразование между целыми числами и числами с плавающей точкой:

package main import "fmt" func main() { var a int = 5 var b float64 = a // Ошибка компиляции fmt.Println(b) }

Правильный способ преобразования:

package main import "fmt" func main() { var a int = 5 var b float64 = float64(a) fmt.Println(b) }

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

5

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

В Go также отсутствует неявное преобразование между строковыми и числовыми типами. Для преобразования между string и числовыми типами используются функции из пакета strconv:

package main import ( "fmt" "strconv" ) func main() { var num int = 123 str := strconv.Itoa(num) fmt.Println(str) }

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

"123"

Единственное исключение: преобразование между byte и rune

Единственным случаем неявного преобразования в Go является возможность присвоения значения типа byte переменной типа rune и наоборот, поскольку эти типы являются алиасами для uint8 и int32 соответственно:

package main import "fmt" func main() { var b byte = 65 var r rune = b fmt.Println(r) }

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

65

Сравнение значений разных типов

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

package main import "fmt" type MyInt int func main() { var x int = 10 var y MyInt = 10 fmt.Println(x == y) // Ошибка компиляции }

Для сравнения необходимо явное преобразование:

package main import "fmt" type MyInt int func main() { var x int = 10 var y MyInt = 10 fmt.Println(x == int(y)) }

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

true

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

  • функцию to-int,
    которая преобразует значение к типу int
  • функцию to-string,
    которая преобразует значение к типу string
  • функцию to-float64,
    которая преобразует значение к типу float64
  • функцию named-types,
    которая описывает преобразование именованных типов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить