离开循环后,指针变成了零



这是我代码的平静:

candles := make([]*base.OHLCVItem, 100)
for i, item := range msgStrSl {
    newCandle, err := parseCandleFromString(item)
    newCandle.Pair = pair
    newCandle.Timeframe = timeframe
    if err != nil {
        bWsLog.WithError(err).Errorf("Failed to parse candle %d.", i)
        continue
    }
    if newCandle == nil {
        panic("nil candle")
    }
    candles = append(candles, newCandle)
    bWsLog.Infof("Sn candle: %d", candles[len(candles)-1].Timestamp)
}
bWsLog.Info(candles[0])
bWsLog.Info(candles[1])
sort.SliceStable(candles, func(i, j int) bool {
    bWsLog.Infof("%d %+v %+v", len(candles), candles[i], candles[j])
    return candles[i].Timestamp < candles[j].Timestamp
}

循环后记录该值为零。但是在循环内登录对象(因此,在此时不是零(我是新手,我可以弄清楚为什么循环结束后切片中的所有元素变成零。您能帮我解决这个问题吗?

您创建一个100个指针的列表,全部为零,然后在位置101 上附加到它。您要打印最后一个元素,确实不是零元素 - 但这也不是第一个元素。是101、102,...等等。然后,您打印前两个元素,它们确实是零。您基本上将一堆指针附加到了100个零下的列表中。

只需将第一行更改为:

candles := make([]*base.OHLCVItem, 0, 100)

将创建一个空切片,但容量为100。

最新更新