
Баг: Игнорирование переполнения при сужении (wrap‑around)
Что делают:var big int16 = 300; var small int8 = int8(big) и ожидают увидеть 300 или ошибку, а видят 44.
Почему ошибка:
При сужении из большего типа в меньший (например, int16 → int8) лишние старшие биты отбрасываются. Для знаковых чисел это приводит к wrap‑around: 300 - 256 = 44. Go не предупреждает, он просто обрезает биты.
Как правильно:
Прежде чем приводить, проверяй, влезает ли число в целевой тип:
if big >= -128 && big <= 127 {
small := int8(big)
} else {
// обработать ошибку
}Загрузка...