如何设置切片最大元素?
我只想要50个元素而不是50个......
这是我的代码
var result []*HistoryData
func convertHistoryResults(currenthashrate int64, online int64, offline int64, now int64) []*HistoryData {
history := HistoryData{}
history.CurrentHashrate = currenthashrate
history.Online = online
history.Offline = offline
history.Timestamp = now
result = append(result, &history)
return result
}
它的工作,但它推动无限的元素...所以我有一个很长的片。我想设置50的最大值。所以我试过
result = append(result[:50], &history)
所以我每次都会覆盖第50个元素,但是idk不起作用:/
我希望在达到第50个元素时关闭第一个元素并设置51,当关闭1时...最新的最后一个和最早的切断
答案 0 :(得分:2)
没有像这样的内置功能。你只需要检查一下:
var result []*HistoryData
func convertHistoryResults(currenthashrate int64, online int64, offline int64, now int64) ([]*HistoryData, error) {
if len(result) >= 50 {
return nil, errors.New("result too long")
}
history := HistoryData{}
history.CurrentHashrate = currenthashrate
history.Online = online
history.Offline = offline
history.Timestamp = now
result = append(result, &history)
return result, nil
}
答案 1 :(得分:0)
这对您有用,但它会为每个附加内容分配内存,因此请确保您不会遇到此代码的性能问题:
i := 0
slice := []int{}
limit := 5
for i < 30 {
if len(slice) > limit {
slice = append(slice[1:], i)
} else {
slice = append(slice, i)
}
fmt.Println(slice)
i++
}