golangでsitemap.xmlのページ情報を取得する

開発中のあるツールの処理を golang で書き直せないかと思ったので試しに書いてみました。golang は手元のちょっとしたツールを書いてみたりしていた程度だったのですが, なかなか便利でよいですね。

お作法的なものとかまだよく分かっていないのでもう少し書けるようになりたいです。

package main

import (
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
)

type Page struct {
    Loc     string `xml:"loc"`
    LastMod string `xml:"lastmod"`
}

type Sitemap struct {
    XMLName xml.Name `xml:"urlset"`
    Pages   []Page   `xml:"url"`
}

func main() {
    url := "http://www.e2esound.com/sitemap.xml"
    sitemap := GetSitemap(url)
    for _, page := range sitemap {
        fmt.Println(page.Loc, page.LastMod)
    }
}

func GetSitemap(url string) []Page {
    response, err := http.Get(url)
    checkErr(err)

    XMLdata, err := ioutil.ReadAll(response.Body)
    checkErr(err)

    var sitemap Sitemap
    xml.Unmarshal(XMLdata, &sitemap)
    return sitemap.Pages
}

func checkErr(err error) {
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
}

参考: Tutorial on how to read XML file in Go. – SocketLoop