Побитовое ИЛИ в 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))