如果长度> 1,则删除切片中的第一项100

时间:2016-11-01 22:29:11

标签: go

当RSS提供更新(它现在不是,只是虚拟数据)时,新项目将附加到“提要”切片。随着时间的推移,这可能意味着它包含数百万件物品,我不希望这样。

因此,当切片中有超过100个项目时,它应该从顶部开始删除项目(项目0)。在这个例子中,我使用的是一个包含最多100个项目的RSS文件,因此下面的示例代码应该在50个项目之后从顶部删除:

package main

import (
    "fmt"
    "github.com/SlyMarbo/rss"
    "time"
)

var feed *rss.Feed
var directory = "./dump"

func main() {
    for {
        checkRSS()
        // Check every minute if feed.Refresh has passed so it run's update()
        time.Sleep(1 * time.Minute)
    }
}

func checkRSS() (*rss.Feed, error) {
    var err error
    // If feed is still empty fetch it first so we can run update()
    if feed == nil {
        feed, err = rss.Fetch("http://cloud.dgier.nl/api.xml")
    } else {
        err = feed.Update()
    }
    length := len(feed.Items)
    for key, value := range feed.Items {
        fmt.Println(key, value.Title, value.Read)
        if key >= 50 {
            fmt.Println("Item key is > 50")

        }
    }
    fmt.Printf("Current length: %d\n", length)
    fmt.Printf("Refreshing at %s\n", feed.Refresh)
    return feed, err
}

2 个答案:

答案 0 :(得分:1)

如果Feed中的商品数量增长超过限制,请将其分割:

length := len(feed.Items)
if length > limit {
    feed.Items = feed.Items[length - limit:]
}

当长度超过限制时,新长度将完全限制。

你不需要for循环。

答案 1 :(得分:0)

要实现这一目标,您可能希望使用子句划分。假设您要从x中移除feed项,您只需执行feed = feed[x:]即可生成索引x-1之后的所有项目,并将其分配回feed切片。如果在您的实际代码中,您只想删除第一个项目,那么它将是feed = feed[1:]