When looking for a good golang ical library we found several existing library which did parts of what is needed, but nothing that put everything together.
This repo uses the following libraries to create a complete event list with reoccuring events unrolled into individual entries.
- arran4/golang-ical (forked with a few changes)
- teambition/rrule-go
The repo is in alpha status. Very little testing has been done, use at your own risk.
This is a quick example how to read in an iCalendar file, parse the events, and print each event back out.
file, err := os.Open("calendar.ics")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// Only events between these two times will be returned
startTime := time.Now()
endTime := startTime.Add(time.Hour * time.Duration(30*24))
icalendar := go_ical.NewICalendar(startTime, endTime, nil)
err = icalendar.Parse(file)
if err != nil {
log.Fatal(err)
}
fmt.Println("Calendar Event: ", len(icalendar.Events))
for i, e := range icalendar.Events {
fmt.Printf("Event %v:\n%+v\n\n", i, e)
}