我的阅读列表中有一些文章。每篇文章都有属性“FeedURL”,其中包含文章来自的提要的 URL。当我取消订阅某个提要时,我希望能够删除包含该提要 URL 的每篇文章。
type Article struct {
FeedURL string
URL string // should be unique
// ... more data
}
func unsubscribe(articleList []Article, url string) []Article {
// how do I remove every Article from articleList that contains url?
}
func main() {
myArticleList := []Article{
Article{"http://blog.golang.org/feed.atom", "http://blog.golang.org/race-detector"},
Article{"http://planet.python.org/rss20.xml", "http://archlinux.me/dusty/2013/06/29/creating-an-application-in-kivy-part-3/"},
Article{"http://planet.python.org/rss20.xml", "http://feedproxy.google.com/~r/cubicweborg/~3/BncbP-ap0n0/2957378"},
// ... much more examples
}
myArticleList = unsubscribe(myArticleList, "http://planet.python.org/rss20.xml")
fmt.Printf("%+v", myArticleList)
}
解决这个问题的有效方法是什么?
起初,我的退订代码如下所示:
func unsubscribe(articleList []Article, url string) []Article {
for _, article := range articleList {
if article.FeedURL == url {
articleList = append(articleList[:i], articleList[i+1:]...)
}
}
return articleList
}
但后来我意识到这会改变切片并使 for 循环不可预测。
什么是实现此目标的有效且漂亮的方法?