В чем разница между `int` и `uint` в Go?

Ответ

Основное различие между 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.