Ответ
Типизация определяет, когда и как проверяются типы переменных в языке программирования. Основное различие заключается во времени проверки: на этапе компиляции или во время выполнения.
Статическая типизация (как в Go)
Тип каждой переменной известен на этапе компиляции. Компилятор проверяет совместимость типов во всех операциях. Это позволяет отлавливать многие ошибки до запуска программы.
- Плюсы: Надежность, ранняя диагностика ошибок, высокая производительность (нет нужды в проверках типов в runtime).
- Минусы: Меньшая гибкость, более многословный код.
// a имеет тип int, и это нельзя изменить
var a int = 10
// Ошибка компиляции: cannot use "text" (type string) as type int in assignment
a = "text"
Динамическая типизация (как в Python, JavaScript)
Тип переменной определяется в момент присваивания значения, то есть во время выполнения программы (runtime). Переменная может менять свой тип в процессе работы.
- Плюсы: Гибкость, скорость разработки, менее многословный код.
- Минусы: Ошибки типов проявляются только при выполнении, что усложняет отладку; потенциально ниже производительность.
# x сначала целое число
x = 10
# теперь x - строка, и это нормально
x = "text"