1 回答

TA贡献1860条经验 获得超9个赞
下一项确实是 ,但如果是最后一个元素的索引,则没有下一项,在这种情况下是无效的索引,并且尝试使用它会导致运行时死机。value.Values[index+1]indexindex+1value.Values
所以检查索引:
for index, currentRow := range value.Values {
var nextRow Value
if index < timeSeriesDataCount && index < len(value.Values)-1 {
nextRow = value.Values[index+1]
fmt.Print(nextRow)
}
}
另一种选择是在一个少一个切片上划一个范围(不包括最后一个元素),因此无需检查 ,肯定还有另一个元素:index
for index, currentRow := range value.Values[:len(value.Values)-1] {
var nextRow Value
if index < timeSeriesDataCount {
nextRow = value.Values[index+1]
fmt.Print(nextRow)
}
}
在这种情况下,您必须考虑的是,如果是空的,因为如果是,则上述切片操作将再次惊慌失措,因此请检查:value.Values
if len(value.Values) > 0 {
for index, currentRow := range value.Values[:len(value.Values)-1] {
var nextRow Value
if index < timeSeriesDataCount {
nextRow = value.Values[index+1]
fmt.Print(nextRow)
}
}
}
请注意,我们可以检查是否,因为即使不会有恐慌,如果,也会有迭代。len(value.Values) > 1len = 10
另请注意,在排除最后一个元素的切片上进行范围不会访问最后一个元素(显然),因此,如果您要对元素执行任何其他操作,这可能不可行,但在您的示例中,它们是等效的。
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报