从3个单独的切片创建新的组合结构切片时索引超出范围(每个struct属性一个切片)

时间:2018-12-21 14:30:57

标签: for-loop go struct

我有一个这样的结构:

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%]

现在,我想通过组合这些来创建新的Header切片。我相信我正在解决一个问题- 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

请有人在这里帮助我吗?我看不到我在做什么错

我认为第三个属性的长度比其余属性短1个

1 个答案:

答案 0 :(得分:2)

似乎您在headerLabels上循环一个索引的时间太长。

尝试更改 i <= len(headerLabels)i < len(headerLabels)

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