int — знаковый, uint — беззнаковый. int хранит отрицательные числа, uint — только >= 0. Оба имеют размер, зависящий от платформы: 32 бита на 32-битной, 64 бита на 64-битной.
Есть фиксированные варианты: int8/16/32/64, uint8/16/32/64. uint полезен для битовых операций и индексов, но в Go обычно используют int даже для индексов — это идиоматично.
len() и cap() возвращают int, не uint. Операции между int и uint требуют явного приведения типов.