Индекс вне диапазона при создании нового комбинированного фрагмента структур из 3 отдельных фрагментов (один фрагмент для каждого свойства структуры) - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть такая структура:

type Headers struct {
    header            string
    valueFromCalculation    string
    value            float64
}

Мне нужно три слайса со значениями для каждого из них:

var headerLabels []string
var values []float64
var valueFromCalculation []string


[January February March April May June July August September TOTAL]
[175 167 148 142 125 114 130 120 30 1151]
[15% 15% 13% 12% 11% 10% 11% 10% 3%]

Теперь я хочу создать новый фрагментЗаголовки, объединяя их.Есть одна проблема, которую, я считаю, я решаю - длина valueFromCalcuation на 1 меньше, чем у остальных срезов

Чтобы создать новый срез, я хочу сделать это:

sliceOfHeaders := []*Headers{}

for i := 0; i <= len(headerLabels); i++ {

headerEntry := new(Headers)

headerEntry.header = headerLabels[i]
headerEntry.value = values[i]

if i == len(headerLabels) {
    headerEntry.valueFromCalculation = ""
} else {
    headerEntry.valueFromCalculation = valueFromCalculation[i]
}

sliceOfHeaders = append(sliceOfHeaders, headerEntry)
}

Выдает приведенную ниже ошибку :

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

Как это может быть?

Я учитываю проблему индекса с длиной valueFromCalculation, которая на единицу меньше, чем другие свойства структуры

Здесь вы можете увидеть выходные данные, прежде чем я захочу запустить свой цикл:

header --> [January February March April May June July August September TOTAL]
value --> [175 167 148 142 125 114 130 120 30 1151]
valueFromCalculation --> [15% 15% 13% 12% 11% 10% 11% 10% 3%]
header length --> 10
value length --> 10
valueFromCalculation length --> 9

Может кто-нибудь помочь мне здесь?Я не вижу, что я делаю неправильно

Я считаю, что длина 3-го свойства на 1 меньше, чем у остальных

1 Ответ

0 голосов
/ 21 декабря 2018

Похоже, вы слишком долго зацикливаете один индекс на headerLabels.

Попробуйте изменить i <= len(headerLabels) на i < len(headerLabels)

И

if i == len(headerLabels) на if i == len(headerLabels) - 1

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