package main import ( "fmt" "os" "strings" "text/template" ) type ( blogRec struct { URL string Title string Author string } ) func genRecs() { fmt.Println("Generating blog recommendations...") recList := genBlogRecs() fmt.Println("Generating blog recommendation RSS...") genRSSBlogRecs(recList) } func readBlogRecs() []blogRec { // read file content, err := os.ReadFile("templates/blogrecs.txt") if err != nil { fmt.Printf("ERROR reading blogrecs file: %s\n", err) } state := 0 // 1 url, 2 title, 3 author var b strings.Builder // builder for string parsing var recList []blogRec for _, char := range content { switch state { case 0: recList = append(recList, blogRec{}) state = 1 case 1: if char == '\n' { recList[len(recList)-1].URL = b.String() b.Reset() state = 2 } b.WriteByte(char) case 2: if char == '\n' { recList[len(recList)-1].Title = b.String() b.Reset() state = 3 } b.WriteByte(char) case 3: if char == '\n' { recList[len(recList)-1].Author = b.String() b.Reset() state = 0 } b.WriteByte(char) } } return recList } func genBlogRecs() []blogRec { recList := readBlogRecs() // template tpl, err := template.ParseFiles("templates/blogrecs.html.gotmpl") if err != nil { fmt.Printf("ERROR creating template: %s\n", err) } f, err := os.Create("html/en/blogrecs.html") if err != nil { fmt.Printf("ERROR creating html: %s\n", err) panic(1) } err = tpl.ExecuteTemplate(f, "blogrecs.html.gotmpl", recList) if err != nil { fmt.Printf("ERROR executing template: %s\n", err) } return recList }