При объявлении двух константных переменных (одной типизированной и одной нетипизированной) и распечатки типа второй, например:
const x float32 = 10000
const y = 1e8 / x
fmt.Printf("the type of y: %T \n", y)
// or with reflect:
fmt.Println(reflect.TypeOf(y))
это говорит мне, что y
имеет тип float32
.
Что ж, это не удивительно, поскольку нетипизированная константная переменная y
определяется как деление нетипизированной константы с плавающей точкой на типизированную константу с плавающей точкой, и поэтому тип может быть выведен.
Согласно "Go by Example" (https://gobyexample.com/constants), константы никогда не имеют типа, если это не указано явно. Однако, согласно официальной документации блога Go, нетипизированные константы do имеют скрытые типы, которые выводятся, но пусть константа остается нетипизированной до тех пор, пока не потребуется тип.
Я бы предположил, что y
все еще будет нетипизированной константой с плавающей точкой. Однако, когда он используется для назначения новой переменной, инспектор Голанда говорит мне, что тип может быть опущен:
const z float32 = y
// ^^^ type can be ommitted
Итак, наконец, мой вопрос будет:
Разве невозможно объявить нетипизированную константу из типизированных константных выражений?