
Баг: Забыл, что у неинициализированной переменной есть значение
Новички думают, что если они написали var count int, то переменная "пустая" или "не содержит значения". Но это не так — у неё уже есть нулевое значение (zero value).
Пример ошибки (логическая, не синтаксическая):
package main
import "fmt"
func main() {
var age int // zero value = 0
var name = "Гофи" // явно задано
// Забыли прочитать ввод или присвоить возраст
fmt.Println(name, "возраст:", age)
// 🐛 Выведет: Гофи возраст: 0
}Новичок думает: "Я не задавал возраст, значит, программа должна остановиться или показать 'пусто'".
В Go var age int → сразу кладёт 0. Компилятор молчит, программа работает, а результат враньё. На реальных данных это значит:
0лет → индивидуум считается новорождённым, хотя ему 140рублей → скидка 100%, а должна быть 10%""→ логин пустой, но система "пропускает" дальше
Главный урок на этом этапе
В Go нет состояния "не задано". Есть только "я не написал, поэтому язык подставил значение по умолчанию".
Если видишь var x int → в памяти уже лежит 0. Если var s string → уже лежит "".
Твоя задача: всегда явно задавать начальное значение, если оно не равно zero value, или осознанно использовать его.
Почему Go так делает?
Это не баг, а защита от неопределённости. В некоторых языках неинициализированная переменная содержит "мусор" из памяти → программа может работать сегодня, а завтра упасть.
Go гарантирует: что написал, то и получил.
0предсказуем." "предсказуем.falseпредсказуем.
Загрузка...