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

For loop 从3个单独的切片(每个结构属性一个切片)创建新的结构组合切片时,索引超出范围,for-loop,go,struct,For Loop,Go,Struct,我有一个这样的结构: type Headers struct { header string valueFromCalculation string value float64 } 我需要三个切片,每个切片的值如下: var headerLabels []string var values []float64 var valueFromCalculation []string [January February Ma

我有一个这样的结构:

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%]
现在,我想通过组合这些标题来创建一个新的标题片段。有一个问题,我相信我正在解决-ValueFromCalculation的长度比其余切片的长度短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)
}
有人能帮我吗?我看不出我做错了什么


我认为第三个属性的长度比其他属性的长度短1,这表明您在headerLabel上循环一个索引太长了

试着改变
i您没有考虑额外的元素,因为
len(headerLabels)
超过了
valueFromCalculation
的最后一个索引。您的for循环也不正确,您不能使用
,但会说如果索引位于最后一个位置,请将valueFromCalculation设置为“”不解决此问题?你不是说它在最后一个位置,你是说它比最后一个位置高一点。最后一个索引是len-1,而不是len。@MassiveOwl,最后一个索引是
len-1
,这就是为什么对于i:=0,基本for循环总是写为
;i
谢谢你的帮助,这是我犯的一个愚蠢而根本的错误。这些是在自己的代码中最难发现的错误。
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