
Баг: Короткое замыкание (short-circuit) работает не так, как ты думаешь
Go вычисляет && и || слева направо и останавливается, когда ответ уже ясен. Это полезно, но может привести к ошибкам, если справа есть вызов функции.
// ❌ ОШИБКА (логическая)
func dangerous() bool {
fmt.Println("Я опасная функция, меня не вызывай просто так!")
return true
}
a := false
b := dangerous() // ❌ Вызовется всегда! А мы хотели только если a == true?
// ✅ ПРАВИЛЬНО (используем короткое замыкание)
c := false && dangerous() // dangerous() НЕ вызовется, потому что false && ... = false
d := true || dangerous() // dangerous() НЕ вызовется, потому что true || ... = trueВывод: Если хочешь, чтобы функция вызывалась только при необходимости - ставь ее справа от && (если левый операнд true) или от || (если левый операнд false).
Загрузка...