Spe c: Константы:
Нетипизированная константа имеет тип по умолчанию , который является типом, в который константа неявно преобразуется в контексты, где требуется типизированное значение, например, в кратком объявлении переменной , таком как i := 0
, где нет явного типа. Тип по умолчанию для нетипизированной константы - bool
, rune
, int
, float64
, complex128
или string
соответственно, в зависимости от того, является ли она логической, рунической, целой, с плавающей точкой, сложной или строковая константа.
a := 40
- краткое объявление переменной, нетипизированная целочисленная константа 40
имеет тип по умолчанию int
, поэтому a
будет иметь тип int
.
В a/100.0
, поскольку a
имеет тип int
, а 100.0
представлен целым числом, он будет принимать тип int
, а a/100.0
будет целочисленным делением, в результате 0
.
Это значение 0
int
будет затем преобразовано в float64
.
Обратите внимание, что если вы измените первую строку на:
a := 40.0
Тогда вывод будет 0.4
, потому что 40.0
является нетипизированным литералом с плавающей запятой и поэтому имеет тип по умолчанию float64
. Таким образом, a
будет иметь тип float64
, а a/100.0
будет делением с плавающей запятой, что приведет к 0.4
. Попробуйте на Go Playground .
Вы получите тот же результат, если будете использовать типизированную константу, потому что здесь не используется тип по умолчанию, float64(40)
является типизированной константой, очевидно, типа float64
(попробуйте на Go Playground ):
a := float64(40)
См. Блог Go: Константы .