/
gen.go
62 lines (50 loc) · 1.51 KB
/
gen.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package gen
import (
"html/template"
"log"
"net/http"
"github.com/julienschmidt/httprouter"
)
type HandlerFunc func(c *Context)
type Engine struct {
*RouterGroup
router *httprouter.Router
groups []*RouterGroup // stores all groups
// for html render
htmlTemplates *template.Template
funcMap template.FuncMap
}
func New() *Engine {
engine := &Engine{router: httprouter.New()}
engine.RouterGroup = &RouterGroup{engine: engine}
engine.groups = []*RouterGroup{engine.RouterGroup}
log.SetPrefix("[GEN] ")
return engine
}
// Default use Logger & Recovery middlewares
func Default() *Engine {
engine := New()
engine.Use(Logger(), Recovery())
return engine
}
// SetFuncMap assume that only invoke one time
func (e *Engine) SetFuncMap(funcMap template.FuncMap) {
e.funcMap = funcMap
}
func (e *Engine) LoadHTMLGlob(path string) {
e.htmlTemplates = template.Must(template.New("").Funcs(e.funcMap).ParseGlob(path)) // like *.tmpl
}
func (e *Engine) LoadHTMLFiles(files ...string) {
e.htmlTemplates = template.Must(template.New("").Funcs(e.funcMap).ParseFiles(files...)) // like a.tmpl, b.tmpl...
}
func (e *Engine) Run(addr string) error {
log.Printf("Listening and serving HTTP on %s\n", addr)
return http.ListenAndServe(addr, e)
}
func (e *Engine) RunTLS(addr, certFile, keyFile string) error {
log.Printf("Listening and serving HTTPS on %s\n", addr)
return http.ListenAndServeTLS(addr, certFile, keyFile, e)
}
func (e *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) {
e.router.ServeHTTP(w, req)
}