Я не уверен, почему я получаю индекс из-за ошибки диапазона - PullRequest
0 голосов
/ 09 октября 2019

Я получаю сообщение об ошибке:

паника: ошибка во время выполнения: индекс выходит за пределы диапазона

маршрут 7 [выполняется]: main.start (0xc0000540e0, 0x8, 0xc0000542a0, 0x63, 0x1, 0xc00249a0c0)

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

Код, вызывающий эту ошибку, выглядит следующим образом:

end, _ := time.Parse("15:04:05", lines[len(lines)-1].Timestamp)
start, _ := time.Parse("15:04:05", lines[0].Timestamp)
midnight, _ := time.Parse("15:04:05", "00:00:00")
duration := end.Sub(start).Seconds()
if start.Hour() > end.Hour() {
   toMidnight := 24*3600 - start.Sub(midnight).Seconds()
   timeDuration = toMidnight + end.Sub(midnight).Seconds()
}

1 Ответ

3 голосов
/ 09 октября 2019

Во-первых, никогда не пропускайте ошибки!

Чтобы ответить на ваш вопрос: если lines пусто (len(lines) == 0), то len(lines)-1 будет -1, что может вызвать вашу ошибку.

Точно так же, если lines пусто, lines[0] также находится вне диапазона, но предыдущая строка паникует, поэтому вы не окажетесь здесь.

Я предполагаю, что lines пусто,весь код должен быть пропущен (нечего анализировать), поэтому сначала проверьте это. Например:

if len(lines) == 0 {
    return
}

// There are lines, it's safe to index it with 0 and len(lines)-1

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...