Go - uint32 in for loop condition (несогласованные типы int и uint32)

Для строгости строения я иногда сохраняю свои размеры как uint, когда размер не может быть отрицательным. Когда используется для циклов for, я хочу, чтобы он выглядел следующим образом:

var size uint32 = 8
for i := 0; i < size; {
    n := //doesn't matter how how this value is determined
    i += n
}

Однако я получаю следующее сообщение об ошибке: invalid operation: i < size (mismatched types int and uint32)

Переписывание цикла for для указания типа типа:

for var i uint32 = 0; i < size; {

Устанавливает эту ошибку компилятора: syntax error: var declaration not allowed in for initializer

Единственными способами, связанными с этими ошибками, являются:

for i := 0; uint32(i) < size; {

или

var i uint32 = 0
for i < size {

Первый из них неэффективен, потому что я бросаю на каждую итерацию, а второй - менее изящный. Есть ли лучший способ сделать это?

Ответ 1

Вы можете сделать:

for i := uint32(0); i < size; {
    //whatever
}

Как правило, я не рекомендую использовать целое число без знака, даже когда размер никогда не может быть отрицательным. Я не знаю ни слова. Я использую только целые числа без знака, когда я намеренно переполняю.