This post shows how to convert Atom 1.0  to RSS 2.0 . The
example Atom 1.0 feed  comes from kura.io  website. Note that only important
fields in RSS feed are copied to corresponding Atom equivalent.
Souce Code 
Run code on Go Playground 
            
              atom2rss.go  |
              repository  |
              view raw 
             
             1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
90 
91 
92 
93 
94 package   main 
import   ( 
	 "io/ioutil" 
	 "encoding/xml" 
	 "html/template" 
	 "fmt" 
) 
type   Rss2   struct   { 
	 XMLName 		 xml . Name 	 `xml:"rss"` 
	 Version 		 string 		 `xml:"version,attr"` 
	 // Required 
	 Title 		 string 		 `xml:"channel>title"` 
	 Link 		 string 		 `xml:"channel>link"` 
	 Description 	 string 		 `xml:"channel>description"` 
	 // Optional 
	 PubDate 		 string 		 `xml:"channel>pubDate"` 
	 ItemList 	 [] Item 		 `xml:"channel>item"` 
} 
type   Item   struct   { 
	 // Required 
	 Title 		 string 		 `xml:"title"` 
	 Link 		 string 		 `xml:"link"` 
	 Description 	 template . HTML 	 `xml:"description"` 
	 // Optional 
	 Content 		 template . HTML 	 `xml:"encoded"` 
	 PubDate 		 string 		 `xml:"pubDate"` 
	 Comments 	 string 		 `xml:"comments"` 
} 
type   Atom1   struct   { 
	 XMLName 		 xml . Name 	 `xml:"http://www.w3.org/2005/Atom feed"` 
	 Title 		 string 		 `xml:"title"` 
	 Subtitle 	 string 		 `xml:"subtitle"` 
	 Id 		 string 		 `xml:"id"` 
	 Updated 		 string 		 `xml:"updated"` 
	 Rights 		 string 		 `xml:"rights"` 
	 Link 		 Link 		 `xml:"link"` 
	 Author 		 Author 		 `xml:"author"` 
	 EntryList 	 [] Entry 		 `xml:"entry"` 
} 
type   Link   struct   { 
	 Href 		 string 		 `xml:"href,attr"` 
} 
type   Author   struct   { 
	 Name 		 string 		 `xml:"name"` 
	 Email 		 string 		 `xml:"email"` 
} 
type   Entry   struct   { 
	 Title 		 string 		 `xml:"title"` 
	 Summary 		 string 		 `xml:"summary"` 
	 Content 		 string 		 `xml:"content"` 
	 Id 		 string 		 `xml:"id"` 
	 Updated 		 string 		 `xml:"updated"` 
	 Link 		 Link 		 `xml:"link"` 
	 Author 		 Author 		 `xml:"author"` 
} 
func   atom1ToRss2 ( a   Atom1 )   Rss2   { 
	 r   :=   Rss2 { 
		 Title :   a . Title , 
		 Link :   a . Link . Href , 
		 Description :   a . Subtitle , 
		 PubDate :   a . Updated , 
	 } 
	 r . ItemList   =   make ([] Item ,   len ( a . EntryList )) 
	 for   i ,   entry   :=   range   a . EntryList   { 
		 r . ItemList [ i ]. Title   =   entry . Title 
		 r . ItemList [ i ]. Link   =   entry . Link . Href 
		 if   entry . Content   ==   ""   { 
			 r . ItemList [ i ]. Description   =   template . HTML ( entry . Summary ) 
		 }   else   { 
			 r . ItemList [ i ]. Description   =   template . HTML ( entry . Content ) 
		 } 
	 } 
	 return   r 
} 
func   main ()   { 
	 a   :=   Atom1 {} 
	 xmlContent ,   _   :=   ioutil . ReadFile ( "example-7.xml" ) 
	 err   :=   xml . Unmarshal ( xmlContent ,   & a ) 
	 if   err   !=   nil   {   panic ( err )   } 
	 r   :=   atom1ToRss2 ( a ) 
	 fmt . Println ( r ) 
} 
  
Tested on: Ubuntu Linux 14.10 , Go 1.4 .
[Golang] XML Parsing Example  series: