Skip to content

Instantly share code, notes, and snippets.

@stephenmathieson
Created November 13, 2015 23:29
Show Gist options
  • Save stephenmathieson/148dc9f44bdf8d84a48d to your computer and use it in GitHub Desktop.
Save stephenmathieson/148dc9f44bdf8d84a48d to your computer and use it in GitHub Desktop.

Revisions

  1. stephenmathieson created this gist Nov 13, 2015.
    67 changes: 67 additions & 0 deletions scaffold.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,67 @@
    package main

    import (
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
    "regexp"
    )

    var fileTemplate = `
    package main
    import "fmt"
    func main() {
    }
    `
    var directoryFormat = "./examples/%02d-%s"
    var fileFormat = "%s/main.go"
    var expr = regexp.MustCompile(`<li><a href="([\w-]+)">`)

    func main() {
    html, err := request("https://gobyexample.com/")
    check(err)

    matches := expr.FindAllStringSubmatch(html, -1)
    for i, name := range matches {
    dirname := fmt.Sprintf(directoryFormat, i+1, name[1])
    filename := fmt.Sprintf(fileFormat, dirname)

    err := os.MkdirAll(dirname, 0777)
    check(err)

    fp, err := os.Create(filename)
    check(err)

    _, err = fp.WriteString(fileTemplate)
    check(err)

    defer fp.Close()
    }
    }

    func check(e error) {
    if e != nil {
    panic(e)
    }
    }

    func request(url string) (string, error) {
    res, err := http.Get(url)
    if err != nil {
    return "", err
    }

    defer res.Body.Close()

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
    return "", err
    }

    html := string(body)

    return html, nil
    }