Ответ
Основное различие между int
и uint
в Go заключается в диапазоне значений, которые они могут хранить.
int
— это знаковый целочисленный тип. Он может представлять отрицательные числа, ноль и положительные числа. Его размер (int32
илиint64
) зависит от архитектуры операционной системы (32-битной или 64-битной).uint
— это беззнаковый целочисленный тип. Он может представлять только ноль и положительные числа.
Тип | Диапазон на 64-битной системе | Назначение |
---|---|---|
int | от -9223372036854775808 до 9223372036854775807 | Общие цели: счётчики, индексы, значения, которые могут быть отрицательными. |
uint | от 0 до 18446744073709551615 | Работа с битовыми масками, криптография, значения, которые по своей природе не могут быть отрицательными (например, длина или размер). |
package main
import "fmt"
func main() {
var a int = -100 // Корректно
var b uint = 100 // Корректно
// var c uint = -100 // Ошибка компиляции: constant -100 overflows uint
fmt.Printf("Тип a: %T, значение: %vn", a, a)
fmt.Printf("Тип b: %T, значение: %vn", b, b)
}
Важное замечание: Для обеспечения предсказуемого поведения и переносимости кода, особенно при работе с файлами, сетью или базами данных, рекомендуется использовать типы с фиксированным размером: int8
, uint8
(он же byte
), int16
, uint16
, int32
(он же rune
), uint32
, int64
, uint64
.