В Go int
— это базовый знаковый целочисленный тип, размер которого зависит от архитектуры целевой платформы:
var x int = 42 // Размер зависит от платформы
int32
)int64
)Проверка размера:
fmt.Println("Размер int в байтах:", unsafe.Sizeof(int(0)))
Граничные константы:
math.MinInt // Минимальное значение
math.MaxInt // Максимальное значение
Размер int
определяется:
GOOS
)GOARCH
)Пример кросс-компиляции:
GOOS=linux GOARCH=386 go build # 32-битный int
GOOS=linux GOARCH=amd64 go build # 64-битный int
int
обычно работает быстрееПроблемы:
var a int = 42
var b int32 = 32
sum := a + b // Ошибка: несовместимые типы
Решение:
sum := a + int(b) // Явное приведение
При сериализации (JSON, protobuf и т.д.) int
может вести себя по-разному:
Поведение при переполнении:
x := math.MaxInt
x++ // Станет math.MinInt (заворачивание)
int
используется для:
len()
и cap()
make()
Важно: Даже когда логичнее использовать uint
, в Go предпочитают int
Во многих системных вызовах (например, unsafe.Sizeof
) возвращается int
for i := 0; i < n; i++ { // i будет int
// ...
}
int
часто остается в регистрах процессораint
индексовint
— знаковый целочисленный тип с платформозависимым размеромint32
/int64
uint
в большинстве случаев согласно Go-идиоматикеПравила использования:
int
для целых чиселint32
/int64
uint
без явного приведения