Побитовое ИЛИ в Go

Код:

func (p *packet) readValInt() (int32, error) {
 i := 0
 var res int32
 var read byte

 for ok := true; ok; ok = ((read & 0b10000000) != 0) {
    read, err := p.readByte()
    if(err != nil) {
        return 0, err
    }

    value := (read & 0b01111111)
    res |= (value << (7 * i))
    i++

    if(i > 5) {
        return 0, errors.New("VarInt is too big")
    }
 }

 return res, nil
}

Лог компилятора:

invalid operation: mismatched types int32 and byte

Ругается на строчку:

res |= (value << (7 * i))

Что мне с этим делать? Я также заметил что компилятор не ругается, если заменить int32 на uint32


Ответы (1 шт):

Автор решения: Senior Pomidor

проблема в том, что у вас value << (7 * i) является unit8, а res - это int32. Неявно присваивать нельзя, поэтому компилятор ругается. Вам нужно явно указывать тип следующим образом

res |= int32(value << (7 * i)) 
→ Ссылка