当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
}
答案 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:]