## gorilla/feeds [](https://godoc.org/github.com/gorilla/feeds) [](https://travis-ci.org/gorilla/feeds) feeds is a web feed generator library for generating RSS, Atom and JSON feeds from Go applications. ### Goals * Provide a simple interface to create both Atom & RSS 2.0 feeds * Full support for [Atom][atom], [RSS 2.0][rss], and [JSON Feed Version 1][jsonfeed] spec elements * Ability to modify particulars for each spec [atom]: https://tools.ietf.org/html/rfc4287 [rss]: http://www.rssboard.org/rss-specification [jsonfeed]: https://jsonfeed.org/version/1 ### Usage ```go package main import ( "fmt" "log" "time" "github.com/gorilla/feeds" ) func main() { now := time.Now() feed := &feeds.Feed{ Title: "jmoiron.net blog", Link: &feeds.Link{Href: "http://jmoiron.net/blog"}, Description: "discussion about tech, footie, photos", Author: &feeds.Author{Name: "Jason Moiron", Email: "jmoiron@jmoiron.net"}, Created: now, } feed.Items = []*feeds.Item{ &feeds.Item{ Title: "Limiting Concurrency in Go", Link: &feeds.Link{Href: "http://jmoiron.net/blog/limiting-concurrency-in-go/"}, Description: "A discussion on controlled parallelism in golang", Author: &feeds.Author{Name: "Jason Moiron", Email: "jmoiron@jmoiron.net"}, Created: now, }, &feeds.Item{ Title: "Logic-less Template Redux", Link: &feeds.Link{Href: "http://jmoiron.net/blog/logicless-template-redux/"}, Description: "More thoughts on logicless templates", Created: now, }, &feeds.Item{ Title: "Idiomatic Code Reuse in Go", Link: &feeds.Link{Href: "http://jmoiron.net/blog/idiomatic-code-reuse-in-go/"}, Description: "How to use interfaces <em>effectively</em>", Created: now, }, } atom, err := feed.ToAtom() if err != nil { log.Fatal(err) } rss, err := feed.ToRss() if err != nil { log.Fatal(err) } json, err := feed.ToJSON() if err != nil { log.Fatal(err) } fmt.Println(atom, "\n", rss, "\n", json) } ``` Outputs: ```xml <?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>jmoiron.net blog</title> <link href="http://jmoiron.net/blog"></link> <id>http://jmoiron.net/blog</id> <updated>2013-01-16T03:26:01-05:00</updated> <summary>discussion about tech, footie, photos</summary> <entry> <title>Limiting Concurrency in Go</title> <link href="http://jmoiron.net/blog/limiting-concurrency-in-go/"></link> <updated>2013-01-16T03:26:01-05:00</updated> <id>tag:jmoiron.net,2013-01-16:/blog/limiting-concurrency-in-go/</id> <summary type="html">A discussion on controlled parallelism in golang</summary> <author> <name>Jason Moiron</name> <email>jmoiron@jmoiron.net</email> </author> </entry> <entry> <title>Logic-less Template Redux</title> <link href="http://jmoiron.net/blog/logicless-template-redux/"></link> <updated>2013-01-16T03:26:01-05:00</updated> <id>tag:jmoiron.net,2013-01-16:/blog/logicless-template-redux/</id> <summary type="html">More thoughts on logicless templates</summary> <author></author> </entry> <entry> <title>Idiomatic Code Reuse in Go</title> <link href="http://jmoiron.net/blog/idiomatic-code-reuse-in-go/"></link> <updated>2013-01-16T03:26:01-05:00</updated> <id>tag:jmoiron.net,2013-01-16:/blog/idiomatic-code-reuse-in-go/</id> <summary type="html">How to use interfaces <em>effectively</em></summary> <author></author> </entry> </feed> <?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title>jmoiron.net blog</title> <link>http://jmoiron.net/blog</link> <description>discussion about tech, footie, photos</description> <managingEditor>jmoiron@jmoiron.net (Jason Moiron)</managingEditor> <pubDate>2013-01-16T03:22:24-05:00</pubDate> <item> <title>Limiting Concurrency in Go</title> <link>http://jmoiron.net/blog/limiting-concurrency-in-go/</link> <description>A discussion on controlled parallelism in golang</description> <pubDate>2013-01-16T03:22:24-05:00</pubDate> </item> <item> <title>Logic-less Template Redux</title> <link>http://jmoiron.net/blog/logicless-template-redux/</link> <description>More thoughts on logicless templates</description> <pubDate>2013-01-16T03:22:24-05:00</pubDate> </item> <item> <title>Idiomatic Code Reuse in Go</title> <link>http://jmoiron.net/blog/idiomatic-code-reuse-in-go/</link> <description>How to use interfaces <em>effectively</em></description> <pubDate>2013-01-16T03:22:24-05:00</pubDate> </item> </channel> </rss> { "version": "https://jsonfeed.org/version/1", "title": "jmoiron.net blog", "home_page_url": "http://jmoiron.net/blog", "description": "discussion about tech, footie, photos", "author": { "name": "Jason Moiron" }, "items": [ { "id": "", "url": "http://jmoiron.net/blog/limiting-concurrency-in-go/", "title": "Limiting Concurrency in Go", "summary": "A discussion on controlled parallelism in golang", "date_published": "2013-01-16T03:22:24.530817846-05:00", "author": { "name": "Jason Moiron" } }, { "id": "", "url": "http://jmoiron.net/blog/logicless-template-redux/", "title": "Logic-less Template Redux", "summary": "More thoughts on logicless templates", "date_published": "2013-01-16T03:22:24.530817846-05:00" }, { "id": "", "url": "http://jmoiron.net/blog/idiomatic-code-reuse-in-go/", "title": "Idiomatic Code Reuse in Go", "summary": "How to use interfaces \u003cem\u003eeffectively\u003c/em\u003e", "date_published": "2013-01-16T03:22:24.530817846-05:00" } ] } ```