# #go #constants #typechecking
Вопрос:
Я знаю, что Go-это статически типизированный язык, который не допускает операций, в которых смешиваются числовые типы, например, вы не можете добавить int
в float64
:
package main
import (
"fmt"
)
func main() {
var a int = 1
var b float64 = 1.1
fmt.Println(a b)
}
Запуск этой программы приведет к ошибке:
недопустимая операция: a b (несоответствующие типы int и float64)
Но когда я делаю математику 1 1.1
без объявления переменных, программа возвращает желаемый результат, который 2.1
:
package main
import (
"fmt"
)
func main() {
fmt.Println(1 1.1)
}
Поэтому мой вопрос таков: почему это 1 1.1
работает? Каков числовой тип 1
и 1.1
когда я использую их непосредственно в добавлении?
Комментарии:
1.
1 1.1
оценивается как постоянное выражение. Видишь tour.golang.org/basics/15 и go.dev/блог/константы . Выполнение всего тура Go действительно стоит двух часов и намного проще, чем гадать и экспериментировать.2. Спасибо Волкер, я действительно прохожу экскурсию по Go, в ней объясняется, что такое константа и как объявлять константу с помощью ключевого слова const, но в ней не упоминается, что что-то вроде «1 1.1» оценивается как нетипизированная константа, поэтому я обращаюсь за помощью к StackOverflow. В любом случае, еще раз спасибо за вашу помощь.
Ответ №1:
Как упоминал @Volker, это происходит потому 1 1.1
, что оценивается как нетипизированное постоянное выражение.
Таким образом, приведенная ниже программа также работает, потому что теперь a
и b
то, и другое являются нетипизированными константами.
package main
import (
"fmt"
)
func main() {
const a = 1
const b = 1.1
fmt.Println(a b)
}