您的位置:首页 > 编程语言 > Go语言

go-martini 简单分析之一

2015-09-28 14:22 603 查看

env.go

环境变量

const (    Dev  string = "development"    Prod string = "production"    Test string = "test")

定义3种常用的环境名。

var Env = Devvar Root string

Evn就是上面的环境名,Root表示host执行目录的根路径。

初始化

func init() {    setENV(os.Getenv("MARTINI_ENV"))    var err error    Root, err = os.Getwd()    if err != nil {        panic(err)    }}

一个包的init函数会在调用之前隐式的执行,这里使用init初始化一些环境变量。

容错性

当然,环境变量可能没有设,这里预设了值和判断容错。

func setENV(e string) {

if len(e) > 0 {

Env = e

}

}


logger.go

定义logger middleware

func Logger() Handler {...}

这里的返回值Handler是一个空的接口定义

type Handler interface{}

middleware 的标准逻辑

return func(res http.ResponseWriter, req *http.Request, c Context, log *log.Logger) {

这里的context是关键

log.Printf("Started %s %s for %s", req.Method, req.URL.Path, addr)

rw := res.(ResponseWriter)

c.Next()

log.Printf("Completed %v %s in %v\n", rw.Status(), http.StatusText(rw.Status()), time.Since(start))


这里还是标准的装饰者模式,层层嵌套。关于context,后文再作分解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: