Skip to content

Commit be56600

Browse files
committed
Refactor generate.go to make it easier to generate more files if needed.
Also use text/template to generate the output. It scales better than calls to io.WriteString, etc.
1 parent 71b81eb commit be56600

File tree

1 file changed

+38
-17
lines changed

1 file changed

+38
-17
lines changed

generate.go

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,59 @@ package main
44

55
import (
66
"bytes"
7-
"io"
7+
"fmt"
88
"io/ioutil"
99
"log"
1010
"net/http"
11+
"text/template"
1112
)
1213

13-
func gen() error {
14-
resp, err := http.Get("https://raw.githubusercontent.com/gopherjs/gopherjs/master/README.md")
15-
if err != nil {
16-
return err
17-
}
18-
defer resp.Body.Close()
19-
body, err := ioutil.ReadAll(resp.Body)
20-
if err != nil {
21-
return err
22-
}
14+
func t(text string) *template.Template {
15+
return template.Must(template.New("").Parse(text))
16+
}
2317

24-
var buf bytes.Buffer
25-
io.WriteString(&buf, `---
18+
// Filename -> Template.
19+
var templates = map[string]*template.Template{
20+
21+
"index.md": t(`---
2622
# generated by generate.go; DO NOT EDIT
2723
layout: index
2824
title: Home
2925
permalink: /
3026
---
3127
32-
`)
33-
_, err = buf.Write(body)
28+
{{.HTTPGet "https://raw.githubusercontent.com/gopherjs/gopherjs/master/README.md"}}`),
29+
}
30+
31+
type data struct{}
32+
33+
// HTTPGet fetches the contents at the given url.
34+
func (data) HTTPGet(url string) (string, error) {
35+
resp, err := http.Get(url)
3436
if err != nil {
35-
return err
37+
return "", err
3638
}
39+
defer resp.Body.Close()
40+
body, err := ioutil.ReadAll(resp.Body)
41+
if err != nil {
42+
return "", err
43+
}
44+
return string(body), nil
45+
}
3746

38-
ioutil.WriteFile("index.md", buf.Bytes(), 0644)
47+
func gen() error {
48+
for filename, t := range templates {
49+
var buf bytes.Buffer
50+
err := t.Execute(&buf, data{})
51+
if err != nil {
52+
return err
53+
}
54+
fmt.Println("writing", filename)
55+
err = ioutil.WriteFile(filename, buf.Bytes(), 0644)
56+
if err != nil {
57+
return err
58+
}
59+
}
3960

4061
return nil
4162
}

0 commit comments

Comments
 (0)