В цикле for-range с использованием каналов при каждой итерации будет получаться только одно значение из канала. Чтобы получить несколько значений, нужно вручную производить присваивание их переменным, а цикл использовать другой, например обычный for. Примерно такой цикл результат должен вас устроить:
for {
upd1 := <-updates
upd2 := <-updates
upd3 := <-updates
...
if upd1.Message != nil {
command1 := upd1.Message.Text
...
}
if upd2.Message != nil {
command2 := upd2.Message.Text
...
}
}
Здесь стоит обратить внимание на updN := <-updates - эта инструкция позволяет вручную вычитывать из канала данные.
Еще лучше использовать updN, ok := <-updates - в этом случае переменная ok будет принимать булево значение, которое будет равно false в случае закрытия канала. Рекомендую изучить go channels, чтобы это не вызывало затруднений, т.к. в языке Go это один из основоплагающих инструментов для работы с горутинами. Ну и break в цикле нужно не забыть